Given a collection of numbers that might contain duplicates, return all possible unique permutations.
Example:
Input: [1,1,2] Output: [ [1,1,2], [1,2,1], [2,1,1] ]思路:
这道题目和上一道题目有点类似,相当于它的升级版。与之前所不同的地方是要给每一位list元素添加一个用来标志该数字在 本层循环是否被访问过的数组。如果这个元素在本层中已经被访问过了,那么跳过本次循环。
代码:
class Solution(object): def permuteUnique(self, nums): """ :type nums: List[int] :rtype: List[List[int]] """ self.res=[] sublists = [] nums = sorted(nums) flagList = [0]*len(nums) self.dfs(nums,sublists,flagList) return self.res def dfs(self,nums,sublists,flagList): if len(nums)==len(sublists): self.res.append(sublists[:]) last = None for i in range(len(nums)): m = nums[i] if(flagList[i] == 1): continue if last == m: continue flagList[i]=1 sublists.append(m) self.dfs(nums,sublists,flagList) last = sublists.pop() flagList[i] = 0