class Solution:
def findSubsequences(self, nums: List[int]) -> List[List[int]]:
res = []
track = []
used = [] # 使用used数组对同层重复元素剪枝, 使用start变量对下一层重复元素剪枝
len_nums = len(nums)
def back_track(start, track, used):
if len(track) >= 2:
res.append(track[:])
for choice in range(start, len_nums):
if nums[choice] in used :
continue
if track:
if nums[choice] < track[-1]:
continue
track.append(nums[choice])
used.append(nums[choice])
back_track(choice+1, track, [])
track.pop()
back_track(0, track, used)
return res
注意choice循环中是对同层进行处理的,而调用back_track后是进入了下一层遍历,所以同层可以用used数组剪枝,对下一层可以用start剪枝。