Codewars第十天–Permutations
题目描述:
这是一道常见的全排列题目。需要返回输入字符串的所有排列并删除重复项(如果存在)。
例如:
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 itertools
def permutations(string):
return list("".join(str) for str in set(itertools.permutations(string)))