16. 带重复元素的排列

16. 带重复元素的排列

中文English

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

样例

样例 1:

输入:[1,1]
输出:
[
  [1,1]
]

样例 2:

输入:[1,2,2]
输出:
[
  [1,2,2],
  [2,1,2],
  [2,2,1]
]

挑战

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

DFS写法

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

    def permuteUnique(self, nums):
        # write your code here
        #for循环内嵌dfs写法
        if not nums: return [[]]
        
        results = []
        visted = {}
        self.dfs(results, nums, [], 0, visted)
        
        return results
    
    def dfs(self, results, nums, array, index, visted):
        #递归的出口
        if (len(array) == len(nums)):
            if (array not in results):
                results.append(list(array))
            return
        
        #递归的拆解
        for i in range(len(nums)):
            if (i not in visted):
                visted[i] = True
                array.append(nums[i])
                self.dfs(results, nums, array, index + 1, visted)
                array.pop()
                visted.pop(i)
            

 

posted @ 2020-08-27 21:54  风不再来  阅读(195)  评论(0编辑  收藏  举报