[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 @   人恒过  阅读(5)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本

阅读目录(Content)

此页目录为空

点击右上角即可分享
微信分享提示