lintcode练习-16. 带重复元素的排列

16. 带重复元素的排列

给出一个具有重复数字的列表,找出列表所有不同的排列。

样例

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

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

挑战

使用递归和非递归分别完成该题。

解题思路:

class Solution:
    """
    @param: :  A list of integers
    @return: A list of unique permutations
    """

    def permuteUnique(self, nums):
        # write your code here
        self.res = []
        if nums == None:
            return self.res
        
        nums = sorted(nums)
        #维护一张表,判断是否已经浏览过
        self.dfs(nums, [False for x in range(len(nums))], [])
        
        return self.res
    
    
    def dfs(self, nums, boolean, permutation):
        if len(permutation) == len(nums):
            self.res.append(permutation[:])
            return
        
        for i in range(0, len(nums)):
            #如果已经浏览过, 就跳过
            if boolean[i]:
                continue
            
            if i > 0 and nums[i] == nums[i-1] and boolean[i-1] == False:
                continue
            
            permutation.append(nums[i])
            boolean[i] = True
            self.dfs(nums, boolean, permutation)
            
            boolean[i] = False
            permutation.pop()

 

你可能感兴趣的:(#,lintcode,#,算法,python,#,lintcode练习笔记)