博客
关于我
leetcode 40 组合总和2 js
阅读量:668 次
发布时间:2019-03-15

本文共 1150 字,大约阅读时间需要 3 分钟。

要解决这个问题,我们可以使用回溯法来找出所有可以组成目标数的组合。以下是详细的解决方案:

方法思路

  • 排序数组:首先对候选数组进行排序,这样可以确保我们每次选择的是有序的元素,避免重复选择相同的元素。
  • 递归函数设计:使用一个递归函数进行深度优先搜索,参数包括当前和、起始索引和临时数组。
  • 剪枝条件:如果当前和超过目标数,直接返回,避免不必要的递归调用。
  • 重复元素处理:在递归过程中,确保不重复选择相同的元素,特别是在数组中有连续的相同元素时。
  • 结果记录:当和等于目标数时,将当前组合添加到结果集中。
  • 解决代码

    combinationSum2 = function (candidates, target) {    candidates.sort((a, b) => a - b);    const res = [];    const dfs = (sum, start, temp) => {        if (sum === target) {            res.push(temp.slice());            return;        }        if (sum > target) {            return;        }        for (let i = start; i < candidates.length; i++) {            if (i > start && candidates[i] === candidates[i - 1]) {                continue;            }            temp.push(candidates[i]);            dfs(sum + candidates[i], i + 1, temp);            temp.pop();        }    };    dfs(0, 0, []);    return res;};

    代码解释

  • 排序数组:使用sort方法对候选数组进行排序。
  • 递归函数:定义了一个递归函数dfs,参数包括当前和sum、起始索引start和临时数组temp。
  • 递归条件:如果当前和等于目标数,添加组合到结果数组;如果当前和超过目标数,返回。
  • 遍历元素:从起始索引开始遍历数组中的每个元素。
  • 重复元素处理:如果当前元素与前一个元素相同,跳过以避免重复选择。
  • 递归调用:将当前元素加入临时数组,并递归调用函数。
  • 撤销操作:返回时从临时数组中移除元素,确保每次递归都有独立的组合路径。
  • 通过这种方法,我们可以高效地找到所有符合条件的组合,确保每个组合都是唯一的并且满足条件。

    转载地址:http://nhqmz.baihongyu.com/

    你可能感兴趣的文章
    Python变量命名方法-ChatGPT4o作答
    查看>>
    Python变量与运算符
    查看>>
    Python变量/运算符/函数/模块/string
    查看>>
    python发送邮件的时候出现 error (535, b‘5.7.3 Authentication unsuccessful‘) 解决方法
    查看>>
    python系列【仅供参考】:python flask框架 debug功能
    查看>>
    python发送notes邮件_使用python在Lotus Notes中发送邮件
    查看>>
    Python双版本下创建一个Scrapy(西瓜皮)项目
    查看>>
    Python双版本下No module named 'requests'
    查看>>
    python及pycharm2018软件安装教程
    查看>>
    python去重txt文本_Python实现的txt文件去重功能示例
    查看>>
    python去掉列表的逗号,从Python列表项中删除标点符号
    查看>>
    Python卸载所有包
    查看>>
    python单线程下实现多个socket并发
    查看>>
    Python单元测试框架介绍(超详细~)
    查看>>
    Python单元测试框架
    查看>>
    python单元测试之unittest
    查看>>
    Python单元测试unittest实战
    查看>>
    Python单元测试-模拟VS补丁
    查看>>
    python协程实时输出_Python 协程以及事件循环的问题,怎么知道 IO 读取结束了呢?...
    查看>>
    Python十进制&;包提供错误的结果
    查看>>