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