class Solution:
def findSubsequences(self, nums: List[int]) -> List[List[int]]:
if not nums: return []
res = []
def backtrack(nums, path, index):
if len(path) >= 2:
res.append(path[:])
used = set()
for i in range(index, len(nums)):
if path and nums[i] < path[-1]:
continue
if nums[i] in used:
continue
used.add(nums[i])
path.append(nums[i])
backtrack(nums, path, i + 1)
path.pop()
backtrack(nums, [], 0)
return res
去重时的两个经验:
如果数组能够排序, 那么就排好序,用核心代码,此时需要used数组
如果数组不能排序, 那么就每一层用一个set来标记, 在尝试当前可能的时候,要用set来 考虑剪枝去重
相比来说, 第一种思路会更高效。但第二种适用的情况更广泛, 排序和不排序的, 第二 种都能搞定, 而第一种只能针对排好序的去重。 另外要注意上面两个说的去重都是针对同 一层上的去重操作。如果是不同层上的去重操作,或者used标记是否使用, 或者是全局声 明个set标识