描述
给出一个具有重复数字的列表,找出列表所有不同的排列。
样例
样例 1:
输入:
nums = [1,1]
输出:
[
[1,1]
]
解释:
[1,1]的不同排列只有[1,1]。
样例 2:
输入:
nums = [1,2,2]
输出:
[
[1,2,2],
[2,1,2],
[2,2,1]
]
解释:
[1,2,2]的不同排列有[1,2,2],[2,1,2],[2,2,1]。
这一题是上一题的升级版,最主要的问题就是要解决重复元素。其实也是两行代码就解决了,具体看注释:
class Solution:
"""
@param: : A list of integers
@return: A list of unique permutations
"""
def permuteUnique(self, nums):
# write your code here
if len(nums)==0:
return [[]]
self.results=[]
flags=[0 for i in range(len(nums))]
self.search(sorted(nums),[],flags)
return self.results
def search(self,nums,S,flags):
if len(S)==len(nums):
self.results.append(S)
for i in range(0,len(nums)):
# 解决重复选取问题
# 在有重复元素时,如果前面一个魅被选到就选了后面的元素,则会重复选取
if(i!=0 and nums[i]==nums[i-1] and flags[i-1]==0):
continue
if flags[i]==0:
flags[i]=1
self.search(nums,S+[nums[i]],flags)
flags[i]=0
nums = [1,1]
s = Solution()
print(s.permuteUnique(nums))