当前位置: 首页 > news >正文

算法题-03

组合总数

给你一个无重复元素的整数数组candidates和一个目标整数target,找出candidates中可以使数字和为目标数target的 所有不同组合,并以列表形式返回。你可以按任意顺序返回这些组合。

candidates中的同一个数字可以无限制重复被选取。如果至少一个数字的被选数量不同,则两种组合是不同的。

对于给定的输入,保证和为target的不同组合数少于150个。

示例 1:

输入:candidates = [2,3,6,7], target = 7输出:[[2,2,3],[7]]解释:2 和 3 可以形成一组候选,2 + 2 + 3 = 7 。注意 2 可以使用多次。 7 也是一个候选, 7 = 7 。 仅有这两种组合。

示例 2:

输入:candidates = [2,3,5], target = 8输出:[[2,2,2,2],[2,3,3],[3,5]]

示例 3:

输入:candidates = [2], target = 1输出:[]
/** * @param {number[]} candidates * @param {number} target * @return {number[][]} */ var combinationSum = function(candidates, target) { const path = [] const res = [] const backtrack = (startIndex,sum) => { if(sum === target){ res.push([...path]) return } if(sum > target){ return } for(let i = startIndex; i < candidates.length;i++){ const cur = candidates[i] path.push(cur) backtrack(i,sum + cur) path.pop() } } backtrack(0,0) return res };

首先用一个数组path存当前的组合

用一个变量sum记录当前和

从某个起始下标开始选数,由于题目告诉我们同一个数字可以无限制重复被选取,且如果被选取的数量相同则组合是相同的,所以我们要避免出现[2,2,3][3,2,2]同时存在的情况,可以通过后面的递归只能从当前的下表选取从而避免这一情况,

2 → 只能选 2、3、6、7 3 → 只能选 3、6、7

在回溯函数中,注意这么几块

1. 终止条件:和正好等于 target

if (sum === target) { res.push([...path]) // 注意要拷贝 return }

. 2.剪枝:和超过 target,直接返回,这里主要目的的效率提升

if (sum > target) { return }

3. 遍历候选数组

for (let i = startIndex; i < candidates.length; i++) { const cur = candidates[i] // 选择 path.push(cur) // 递归:i 而不是 i+1(允许重复使用) backtrack(i, sum + cur) // 撤销选择(回溯) path.pop() }

注意:

因为数字可以重复使用,backtrack(i, sum + cur),如果写成i + 1,就变成每个数只能用一次了

res.push([...path]),因为path是同一个数组对象,不拷贝的话,后面回溯会把结果全改掉

http://www.jsqmd.com/news/328020/

相关文章:

  • OTG数据充电交互讲解
  • LDR系列PD应用方案讲解之OTG边听边充边传数据边投屏多合一应用
  • Type-c OTG数据与充电如何进行交互使用应用讲解
  • 大规模语言模型的反事实推理在政策模拟与评估中的多维度应用
  • Issacsim探索——Day1-云服务器一键启动
  • Java语言提供了八种基本类型【函数红色的1】
  • Java全栈开发工程师面试实录:从基础到高阶技术深度解析
  • 2026年武汉市政工程施工服务商价格解析与优质厂商推荐
  • 超越加速:AI编程如何成为开发者能力的“无限杠杆”?
  • 寻找差异表达基因,进行富集分析
  • 前后端分离Spring Boot疗养院管理系统系统|SpringBoot+Vue+MyBatis+MySQL完整源码+部署教程
  • Linux 系统下 Oracle AI Database 26ai 环境部署全解析
  • 企业级+乡政府管理系统管理系统源码|SpringBoot+Vue+MyBatis架构+MySQL数据库【完整版】
  • 从数据孤岛到数据中台:企业大数据整合方案详解
  • Medusa 智能合约 Fuzzing 工具全流程使用教程
  • 前后端分离青年公寓服务平台系统|SpringBoot+Vue+MyBatis+MySQL完整源码+部署教程
  • AI Agent的跨域任务泛化能力开发
  • 前后端分离高校教师电子名片系统系统|SpringBoot+Vue+MyBatis+MySQL完整源码+部署教程
  • 企业级Spring Boot企业员工薪酬关系系统管理系统源码|SpringBoot+Vue+MyBatis架构+MySQL数据库【完整版】
  • 企业级Spring Boot在线远程考试系统管理系统源码|SpringBoot+Vue+MyBatis架构+MySQL数据库【完整版】
  • 2026年唐山地区选煤设备实力厂商综合观察与推荐
  • 前后端分离经方药食两用服务平台系统|SpringBoot+Vue+MyBatis+MySQL完整源码+部署教程
  • SpringBoot+Vue 房屋交易平台平台完整项目源码+SQL脚本+接口文档【Java Web毕设】
  • 企业级房屋交易平台管理系统源码|SpringBoot+Vue+MyBatis架构+MySQL数据库【完整版】
  • SpringBoot+Vue 经方药食两用服务平台平台完整项目源码+SQL脚本+接口文档【Java Web毕设】
  • 【2026可用】Clawcloud Run+gemini balance+cherrystudio轮询号池配置手把手配置图文教程
  • Spring Cloud Gateway 源码架构与核心组件深度解析
  • 微服务API网关Spring Cloud Gateway核心概念与实战详解
  • 2/1号
  • 2026年01月31日最热门的开源项目(Github)