40. Combination Sum II

Difficulty:
Related Topics:
Similar Questions:

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:

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] ] 

Solution

/** * @param {number[]} candidates * @param {number} target * @return {number[][]} */ var combinationSum2 = function(candidates, target) { var res = []; var len = candidates.length; candidates.sort((a, b) => (a - b)); dfs(res, [], 0, len, candidates, target); return res; }; var dfs = function (res, stack, index, len, candidates, target) { var tmp = null; if (target < 0) return; if (target === 0) return res.push(stack); for (var i = index; i < len; i++) { if (candidates[i] > target) break; if (i > index && candidates[i] === candidates[i - 1]) continue; tmp = Array.from(stack); tmp.push(candidates[i]); dfs(res, tmp, i + 1, len, candidates, target - candidates[i]); } }; 

Explain:

与之前一题不同的地方是:

  1. 候选数字可能有重复的
  2. 单个候选数字不能重复使用

Complexity: