Skip to content

40. Combination Sum II

Description

Given a collection of candidate numbers (candidates) and a target number (target), find all unique combinations in candidates where the candidate numbers sum to target.

Each number in candidates may only be used once in the combination.

Note: The solution set must not contain duplicate combinations.

 

Example 1:

Input: candidates = [10,1,2,7,6,1,5], target = 8
Output: 
[
[1,1,6],
[1,2,5],
[1,7],
[2,6]
]

Example 2:

Input: candidates = [2,5,2,1,2], target = 5
Output: 
[
[1,2,2],
[5]
]

 

Constraints:

  • 1 <= candidates.length <= 100
  • 1 <= candidates[i] <= 50
  • 1 <= target <= 30

 

Solutions

Solution: Backtracking

  • Time complexity: O(n*2n)
  • Space complexity: O(n*2n)

 

JavaScript

js
/**
 * @param {number[]} candidates
 * @param {number} target
 * @return {number[][]}
 */
const combinationSum2 = function (candidates, target) {
  const n = candidates.length;
  const result = [];

  candidates.sort((a, b) => a - b);

  const combinationSum = (start, collection, sum) => {
    if (sum > target) return;
    if (sum === target) {
      result.push([...collection]);
      return;
    }

    for (let index = start; index < n; index++) {
      const candidate = candidates[index];

      if (index > start && candidate === candidates[index - 1]) continue;
      collection.push(candidate);
      combinationSum(index + 1, collection, sum + candidate);
      collection.pop();
    }
  };

  combinationSum(0, [], 0);
  return result;
};

Released under the MIT license