class Solution:
def combinationSum2(self, candidates: List[int], target: int) -> List[List[int]]:
def dfs(tmp, sum, start):
if sum > target:
return
elif sum == target:
res.append(list(tmp))
return
for i in range(start, n):
num = candidates[i]
if i-1 >= start and num == candidates[i-1]: #已经使用过了,跳过,去重
continue
dfs(tmp + [num], sum + num, i+1) #每个数字只用一次
candidates.sort()
n = len(candidates)
res = []
dfs([], 0, 0)
return res