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