题目描述:给定一个可包含重复数字的序列 nums ,按任意顺序 返回所有不重复的全排列。
解题思路:和全排列一样的用dfs+回溯,只是因为可能有重复的元素,因此在进行选择是否进行当前次迭代,通过看当前值是否已经在前面遍历中出现过了,不能直接和上一个比较,因为在进行交换之后数组已经无序了,代码如下:
class Solution:
def permuteUnique(self, nums: List[int]) -> List[List[int]]:
# nums.sort()
res = []
def traceback(nums, i):
if i == len(nums) -1:
res.append(nums[:])
s = set()
for j in range(i, len(nums)):
if nums[j] in s:
continue
s.add(nums[j])
nums[i], nums[j] = nums[j], nums[i]
traceback(nums, i+1)
nums[i], nums[j] = nums[j], nums[i]
traceback(nums, 0)
return res