本文共 792 字,大约阅读时间需要 2 分钟。
题目描述:
这是一道常见的全排列题目。需要返回输入字符串的所有排列并删除重复项(如果存在)。 例如:permutations('a'); # ['a']permutations('ab'); # ['ab', 'ba']permutations('aabb'); # ['aabb', 'abab', 'abba', 'baab', 'baba', 'bbaa']
代码如下,使用递归来进行全排列操作,每一次将一个原字符串中的一个字符当做新的字符串的第一位,后面的子字符串同样以递归的方式进行遍历:
def permutations(string): if len(string) <= 1: return string else: result = [] for i in range(len(string)): for j in permutations(string[0:i] + string[i+1:]): result.append(string[i] + j) return set(result)
如果不是为了学习,而是实际中需要全排列,可以直接使用itertools
模块中的permutations
:iterable
为需要处理的字符串,r
为结果输出的字符串长度。
itertools.permutations(iterable, r)
代码可以改为:
import itertoolsdef permutations(string): return list("".join(str) for str in set(itertools.permutations(string)))
转载地址:http://dqmws.baihongyu.com/