39. Combination Sum

Given a set of candidate numbers (C) (without duplicates) and a target number (T), find all unique combinations in C where the candidate numbers sums to T.

The same repeated number may be chosen from C unlimited number of times.

Note:

  • All numbers (including target) will be positive integers.
  • The solution set must not contain duplicate combinations.

For example, given candidate set [2, 3, 6, 7] and target 7, A solution set is:

[
  [7],
  [2, 2, 3]
]

Solution: DFS

class Solution(object):
    def combinationSum2(self, candidates, target):
        """
        :type candidates: List[int]
        :type target: int
        :rtype: List[List[int]]
        """
        candidates.sort()
        combinations = []
        combination = []

        def dfs(start, remain):
            if remain < 0:
                return
            if remain == 0:
                combinations.append(list(combination))
                return
            for idx in xrange(start, len(candidates)):
                num = candidates[idx]
                if idx > start and num == candidates[idx - 1]:
                    continue
                combination.append(num)
                dfs(idx + 1, remain - num)
                combination.pop()

        dfs(0, target)
        return combinations

results matching ""

    No results matching ""