Leetcode47-全排列II
和上一题不同的是,本题的nums中可能包含了重复数字,不能再用if nums[i] in path:来判断了。
此时想到引入一个列表来标记数字是否使用过。
used[I] = True or False
True: 用过了
False:没用过
思路:
代码:
class Solution:
def permuteUnique(self, nums: List[int]) -> List[List[int]]:
def dfs(path, used):
if len(path) == len(nums):
res.append(path[:])
return
for i in range(len(nums)):
if used[i] == False:
if i > 0 and nums[i] == nums[i - 1] and used[i - 1] == False: #如果nums[i-1]未被使用
continue
used[i] = True #被使用 标为True
path.append(nums[i]) #加入到当前列表中
dfs(path, used)
used[i] = False #弹出 标为未使用
path.pop()
nums.sort()
used = [False] * len(nums) #used=[False, False, False]
res = []
dfs([], used)
return res