给定一个可包含重复数字的序列 nums ,按任意顺序 返回所有不重复的全排列。
示例 1:
输入:nums = [1,1,2]
输出:
[[1,1,2],
[1,2,1],
[2,1,1]]
示例 2:
输入:nums = [1,2,3]
输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]
源码:
运行结果:
假如你的输入为nums那么
import itertools
permutation = itertools.permutations(nums)
得到的permutation即为生成的全排列数
def p(s,res=[]):#将字符c插入到数列ar中,会有多少种排列
def h(c,ar):
return [ar[:i]+[c]+ar[i:] for i in range(len(ar)+1)]
#已有结果arr的基础上,如果增加c字符,arr会变成多少种排列
def g(c,arr,res=[]):
if arr==res==[]:
return [[c]]
elif arr==[]:
return res
else:
return g(c,arr[1:],res+h(c,arr[0]))
#主体递归
if s=='':
return res
else:
return p(s[1:],g(s[0],res))
if __name__=='__main__':
s='ABCDE'
for x in p(s):
print(''.join(x))