如何在有重复值的时候节省时间是优化重点。
基础写法肯定是按无重复值时的全排列写,在其中要加上防止走重复路径的分支。
能防止的也只有同层,如果同层走一个值,但是该值重复,且走过了,则放弃走该分支。所以设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