博客
关于我
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/

    你可能感兴趣的文章
    PostgreSQL删除数据库报"ERROR: There is 1 other session using the database."
    查看>>
    PostgreSQL和Oracle两种数据库有啥区别?如何选择?
    查看>>
    PostgreSQL学习总结(11)—— PostgreSQL 常用的高可用集群方案
    查看>>
    PostgreSQL学习总结(1)—— PostgreSQL 入门简介与安装
    查看>>
    PostgreSQL学习总结(2)—— PostgreSQL 语法
    查看>>
    PostgreSQL学习总结(3)—— PostgreSQL 数据类型
    查看>>
    PostgreSQL学习总结(6)—— PostgreSQL 模式(SCHEMA)详解
    查看>>
    PostgreSQL学习总结(7)—— PostgreSQL 语句 INSERT INTO、SELECT、UPDATE、DELETE 等学习
    查看>>
    PostgreSQL学习总结(8)—— PostgreSQL 基于数据库和基于模式(schema)的多租户分析
    查看>>
    PostgreSQL学习总结(9)—— PostgreSQL 运算符与表达式
    查看>>
    PostGreSql学习笔记001---PostgreSQL10.4安装(Windows)_支持PostGreGis_PostJDBC
    查看>>
    PostGreSql学习笔记002---Navicat Premium中管理PostGreSql 错误:字段rolcatupdate 不存在
    查看>>
    PostgreSQL学习笔记:PostgreSQL vs MySQL
    查看>>
    PostgreSQL实现shape数据转geojson数据(地图工具篇.18)
    查看>>
    PostgreSQL导入shape数据(地图工具篇.10)
    查看>>
    PostGreSql工作笔记003---在Navicat中创建数据库时报错rolcatupdate不存在_具体原因看其他博文_这里使用pgAdmin4创建管理postgre
    查看>>
    PostGreSql工作笔记004---PostGreSql修改密码_windows和linux下修改
    查看>>
    Postgresql常用命令行操作_以及Navicat操作PostGis时的问题_自动截取长度_WKB structure does not match exp---PostgreSQL工作笔记005
    查看>>
    PostgreSQL忘记密码
    查看>>
    PostgreSQL数据库pg_dump命令行不输入密码的方法
    查看>>