40. 组合总和 II
解法一:回溯
class Solution:
def combinationSum2(self, candidates: List[int], target: int) -> List[List[int]]:
self.res = []
tmpList = []
candidates.sort()
self.backtrack(tmpList, candidates, target, 0)
return self.res
def backtrack(self, tmpList, candidates, remain, start):
if remain < 0:
return
elif remain == 0:
self.res.append(list(tmpList))
else:
for i in range(start, len(candidates)):
#跳过重复
if i-1 >= start and candidates[i] == candidates[i-1]:
continue
#下一层递归起点为i+1
self.backtrack(tmpList + [candidates[i]], candidates, remain - candidates[i], i+1) 最后更新于