python--lintcode16.带重复元素的排列

描述

给出一个具有重复数字的列表,找出列表所有不同的排列。
您在真实的面试中是否遇到过这个题?
样例

给出列表 [1,2,2],不同的排列有:

[
[1,2,2],
[2,1,2],
[2,2,1]
]

挑战

使用递归和非递归分别完成该题。
这一题是上一题的升级版,上一题见:https://blog.csdn.net/wenqiwenqi123/article/details/80539727
这一题和上次那个数字组合ii问题很像,具体见:https://blog.csdn.net/wenqiwenqi123/article/details/80196635

也是两行代码解决问题,但要注意的是在进入递归时需要先给数组排序:

class Solution:
    """
    @param: nums: A list of integers.
    @return: A list of permutations.
    """
    def permuteUnique(self, nums):
        # write your code here
        def search(nums,lists,index):
            if(len(nums)==len(lists)):
                self.result.append(lists)
                return
            for i in range(0,len(nums)):
                if(self.flag[i]==1):continue

                # 在有重复元素时,如果前面一个没被选到就选了后面的元素,则会重复选取
                elif(i!=0 and nums[i]==nums[i-1] and self.flag[i-1]==0):
                    continue

                else :
                    self.flag[i]=1
                    search(nums,lists+[nums[i]],index+1)
                    self.flag[i]=0

        self.result=[]

        self.flag=[]
        for i in range(len(nums)):
            self.flag.append(0)
        search(sorted(nums),[],0)
        return self.result





s = Solution()
print(s.permuteUnique([3,3,0,3]))

猜你喜欢

转载自blog.csdn.net/wenqiwenqi123/article/details/80540154
今日推荐