剑指 Offer II 082. 含有重复元素集合的组合

119 阅读1分钟

剑指 Offer II 082. 含有重复元素集合的组合

candidates 中的每个数字在每个组合中只能使用一次,解集不能包含重复的组合。

示例:

输入: candidates = [10,1,2,7,6,1,5], target = 8,

输出:

[
    [1,1,6],
    [1,2,5],
    [1,7],
    [2,6]
]
var combinationSum2 = function (arr, target) {
  var res = [];
  var brr = [];
  arr.sort((a, b) => a - b);
  f(0, 0);
  return res;
  function f(j, sum) {
    if (sum == target) {
      return res.push(brr.slice());
    }
    if (sum > target) return;
    for (var i = j; i < arr.length; i++) {
      if (i - 1 >= j && arr[i - 1] == arr[i]) continue;
      brr.push(arr[i]);
      sum += arr[i];
      f(i + 1, sum);
      brr.pop();
      sum -= arr[i];
    }
  }
};

为什么加上 if (i - 1 >= j && arr[i - 1] == arr[i]) continue;,原因是如下图所示

image.png