题目:
全排列 II:给定一个可包含重复数字的序列,返回所有不重复的全排列。
思路:
在第46题的基础上,增加了判断是否是重复的判断,借助findOut来判断新的数是否重复的使用。
程序:
class Solution:
def permuteUnique(self, nums: List[int]) -> List[List[int]]:
nums.sort()
result = []
auxiliary = []
findOut = [0 for _ in range(len(nums))]
def backtrack(nums, auxiliary, result):
if len(auxiliary) == len(nums):
result.append(auxiliary[:])
return
for index in range(len(nums)):
if index >= 1 and nums[index - 1] == nums[index]:
if findOut[index - 1] == 0:
continue
if findOut[index] == 1:
continue
auxiliary.append(nums[index])
findOut[index] = 1
backtrack(nums,auxiliary,result)
auxiliary.pop()
findOut[index] = 0
backtrack(nums,auxiliary,result)
return result