class Solution:
def combinationSum2(self, candidates: List[int], target: int) -> List[List[int]]:
self.res = []
candidates = sorted(candidates)
self.n = len(candidates)
self.backtrack([],0,0, target, candidates[:])
return self.res
def backtrack(self, tmp, cur, index, target, candidates):
if cur > target:
return
if cur == target:
self.res.append(tmp)
return
for i in range(index, self.n):
if i > index and candidates[i] == candidates[i-1]:
continue
self.backtrack(tmp + [candidates[i]], cur+candidates[i], i+1, target, candidates[:])
return