给定一个可包含重复数字的序列nums,按任意顺序返回所有不重复的全排列。
递归,使用hash 计数去重
代码如下:
class Solution:
def permuteUnique(self, nums: List[int]) -> List[List[int]]:
def permute(nums,start,end,res):
if start == end:
res.append(nums[:])
return
visit = {i:False for i in nums} # 记录该元素是否来到过start 位置
for i in range(start,end):
if not visit[nums[i]]: # 当前位置该元素没有来过
visit[nums[i]] = True
nums[start],nums[i] = nums[i],nums[start]
permute(nums,start+1,end,res)
nums[start],nums[i] = nums[i],nums[start]
res = []
permute(nums,0,len(nums),res)
return res