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

    你可能感兴趣的文章
    OpenMMLab | 面向多样应用需求,书生·浦语2.5开源超轻量、高性能多种参数版本
    查看>>
    OpenMV入门教程(非常详细)从零基础入门到精通,看完这一篇就够了
    查看>>
    OpenObserve云原生可观测平台本地Docker部署与远程访问实战教程
    查看>>
    openoffice使用总结001---版本匹配问题unknown document format for file: E:\apache-tomcat-8.5.23\webapps\ZcnsDms\
    查看>>
    OpenPPL PPQ量化(4):计算图的切分和调度 源码剖析
    查看>>
    OpenPPL PPQ量化(5):执行引擎 源码剖析
    查看>>
    openpyxl 模块的使用
    查看>>
    OpenResty(nginx扩展)实现防cc攻击
    查看>>
    Openresty框架入门详解
    查看>>
    OpenResty(1):openresty介绍
    查看>>
    OpenResty(2):OpenResty开发环境搭建
    查看>>
    OpenResty(3):OpenResty快速入门之安装lua
    查看>>
    OpenResty(4):OpenResty快速入门
    查看>>
    OpenResty(5):Openresty 模板渲染
    查看>>
    openshift搭建Istio企业级实战
    查看>>
    OpenSLL
    查看>>
    OpenSSL 引入了新的治理模式和项目,来增强社区参与和决策
    查看>>
    openssl安装
    查看>>
    OpenStack 上部署 Kubernetes 方案对比
    查看>>
    Openstack 之 网络设置静态IP地址
    查看>>