Python:全排列 - permuteUnique

Python015

Python:全排列 - permuteUnique,第1张

给定一个可包含重复数字的序列 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))