首页 > 其他 > 详细

16. 带重复元素的排列

时间:2020-08-27 22:31:23      阅读:90      评论:0      收藏:0      [点我收藏+]

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)
            

 

16. 带重复元素的排列

原文:https://www.cnblogs.com/yunxintryyoubest/p/13574236.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!