给定一个可包含重复数字的序列,返回所有不重复的全排列。
示例:
输入: [1,1,2] 输出: [ [1,1,2], [1,2,1], [2,1,1] ]
解题思路
我们以[1,2,3]为例进行说明,对于这个数组我们可以若先取值1,剩下的就是[2,3], 若取2,剩下的就是[1,3];若取3,剩下的就是[1,2]。那我们的排列是当前取的值加 上剩下长度为n-1=2的数组的排列,对于这个数组我们可以用同样的思路解决。
重复问题的解决
我们以[1,1,3]为例进行说明,对于这个数组我们可以若先取值3,剩下的就是[1,1], 若取2,剩下的就是[1,1];对于这个二维数组我们只需取出第1个1即可,而无需像数组 【1,2,3】这样,取出3,剩下【1,2】接下来分别考虑先取1还是先取2。
python 代码
class Solution:
def permuteUnique(self, nums: List[int]) -> List[List[int]]:
res=[]
if not nums:
return res;
nums.sort()
self.dfs(nums,res,[])
return res;
def dfs(self,nums,res,line):
if not nums:
res.append(line)
for i,num in enumerate(nums):
if i>0 and nums[i]==nums[i-1]:
continue
self.dfs(nums[:i]+nums[i+1:],res,line+[num])