(Medium #40) Combination Sum II

Problem

Given a collection of candidate numbers (candidates) and a target number (target), find all unique combinations in candidates where the candidate numbers sums to target.
Each number in candidates may only be used once in the combination.
Note:
  • All numbers (including target) will be positive integers.
  • The solution set must not contain duplicate combinations.
Example 1:
Input: candidates = [10,1,2,7,6,1,5], target = 8,
A solution set is:
[
  [1, 7],
  [1, 2, 5],
  [2, 6],
  [1, 1, 6]
]
Example 2:
Input: candidates = [2,5,2,1,2], target = 5,
A solution set is:
[
  [1,2,2],
  [5]

My solution

class Solution(object):
    def combinationSum2(self, candidates, target):                
        candidates.sort()
        res = []        
        self.dfs(candidates, 0, target, [], res)
        
        return res
        
    def dfs(self, cand, start, target, path, res):
        if target < 0: # backtracking
            return 
        if target == 0:
            res.append(path)
            return
        for i in range(start, len(cand)):
            if i > start and cand[i-1] == cand[i]:
                continue
            else:
                self.dfs(cand, i+1,  target-cand[i], path+[cand[i]], res)   
Runtime: 100ms, Memory: 13.8MB

댓글