def combinationSum2(candidates, target): res = [] candidates.sort() def dfs(target, index, path): if target < 0: return # backtracking if target == 0: res.append(path) return # backtracking for i in range(index, len(candidates)): if candidates[i] == candidates[i-1]: continue dfs(target-candidates[i], i+1, path+[candidates[i]]) dfs(target, 0, []) return res