参考的这个链接:
https://mp.weixin.qq.com/s/trILKSiN9EoS58pXmvUtUQ
https://www.cxyxiaowu.com/2946.html
第一个是基础,第二个是本题题解
基于全排列题的修改(第二个链接的关键)
一点理解:
在使用辅助数组used判断每个数字是否被访问过时,需注意以下方面:
在一个路径还未遍历完成之前,对访问过的数设置True,这样在下次遍历的时候就不会重复访问。但是当一个路径遍历完成后used的所有值需要重新设置为false(在回溯的过程中)。
class Solution:
def permuteUnique(self, nums):
def dfs(size,path,used):
if len(path) == size:
res.append(path.copy())#这是一种方法,其实还有其他方法
return#这样递归才可以继续进行
for i in range(len(nums)):
if not used[i]:
if i > 0 and nums[i] == nums[i - 1] and not used[i - 1]:
continue
path.append(nums[i])
used[i] = True
dfs(size, path, used)
used[i] = False
path.pop()
nums.sort()
used = [False] * len(nums)
res = []
size = len(nums)
dfs(size,[],used)
return res