[40] 组合总和 II

/**
 * @param {number[]} candidates
 * @param {number} target
 * @return {number[][]}
 */
var combinationSum2 = function (candidates, target) {
  candidates.sort()
  const res = [];
  const ope = (cur, start, sum) => {
    // 如果 sum 大于等于 target ,结束本次递归,如果 sum === target ,将结果保存到 res 中
    if (sum >= target) {
      if (sum === target) {
        res.push(cur);
      }
      return;
    }
    // start 记录下一个查找数字不会与上一次查找的结果重复
    for (let i = start; i < candidates.length; i++) {
      if (i !== start && candidates[i] === candidates[i - 1]) {
        continue
      }
      cur.push(candidates[i]);
      ope(cur.slice(), i + 1, sum + candidates[i]);
      // 需要清除本次递归调用的结果,不然下一次的结果会保留本次的结果
      cur.pop();
    }
  };
  ope([], 0, 0);
  return res;
};

 

posted @ 2023-11-30 13:51  人恒过  阅读(19)  评论(0)    收藏  举报