class Solution:
def back(self,num,target,start,path,res,used):
if sum(path) == target:
res.append(path[:])
return
for i in range(start,len(num)):
# 因为回溯完,used【i】又变为False,所以当下一个元素跟上一个元素相等时,其实used【i-1】是False的
if i > start and num[i] == num[i-1] and not used[i-1]:
continue
if sum(path) + num[i] > target:
break
path.append(num[i])
used[i] = True
self.back(num,target,i+1,path,res,used)
used[i] = False
path.pop()
def combinationSum2(self, candidates: List[int], target: int) -> List[List[int]]:
candidates.sort()
res = []
result = []
used = [False]*(len(candidates))
self.back(candidates,target,0,[],res,used)
return res
一定要掌握去重方法!