给出一个具有重复数字的列表,找出列表所有不同的排列。
样例 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)
原文:https://www.cnblogs.com/yunxintryyoubest/p/13574236.html