題目:
全排列 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