如何在有重復值的時候節省時間是優化重點。
基礎寫法肯定是按無重復值時的全排列寫,在其中要加上防止走重復路徑的分支。
能防止的也只有同層,如果同層走一個值,但是該值重復,且走過了,則放棄走該分支。所以設layer_used_num這個set。
class Solution:def permuteUnique(self, nums: List[int]) -> List[List[int]]:results = []def backtrack(path, path_used_idx):if len(path) == len(nums):results.append(path[:])returnlayer_used_num = set()for i in range(0, len(nums)):if nums[i] in layer_used_num:continueif i in path_used_idx:continuelayer_used_num.add(nums[i])path.append(nums[i])path_used_idx.add(i)backtrack(path, path_used_idx)path.pop()path_used_idx.remove(i)backtrack([], set())return results