给定一个可包含重复数字的序列,返回所有不重复的全排列。
示例:
输入: [1,1,2]
输出:
[
[1,1,2],
[1,2,1],
[2,1,1]
]
思路
和46题差不多46题见此
https://blog.csdn.net/qq_37369124/article/details/87781639
同样是递归,因为有重复数字,所以一个数字只能开头一次,
如[1,1,2,3]的结果,便是1 + [1,2,3]的全排列,2+[1,1,3]的全排列,3+[1,1,2]的全排列
合并即可
代码
def permuteUnique(self, nums):
nums.sort()
return self.help(nums)
def help(self,nums):
l=[]
if(len(nums)==0):return []
if(len(nums)==1):return [nums]
a=self.help(nums[1:])
for c in a:
l.append([nums[0]]+c)
for i in range(1,len(nums)):
if(nums[i]!=nums[i-1]):
a=self.help(nums[i+1:]+nums[:i])
for c in a:
l.append([nums[i]]+c)
return l