news 2026/6/13 4:47:41

算法题-03

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
算法题-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是同一个数组对象,不拷贝的话,后面回溯会把结果全改掉

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/12 14:22:13

OTG数据充电交互讲解

随着科技的飞速发展&#xff0c;智能移动设备已成为我们生活中不可或缺的一部分。而在这些设备的连接与数据传输中&#xff0c;Type-C接口以其高效、便捷的特性逐渐占据了主导地位。OTG&#xff08;On-The-Go&#xff09;技术则进一步扩展了Type-C接口的功能&#xff0c;使得设…

作者头像 李华
网站建设 2026/5/29 10:50:22

OpenClaw:你的个人AI助手,多平台统一控制的革命性方案

在这个AI助手百花齐放的时代&#xff0c;你是否厌倦了在多个平台间来回切换&#xff1f;OpenClaw用一套系统统一了所有沟通渠道&#xff0c;让你真正拥有属于自己的AI助手。 &#x1f99e; 什么是OpenClaw&#xff1f; OpenClaw是一个开源的个人AI助手平台&#xff0c;它可以在…

作者头像 李华
网站建设 2026/6/11 3:48:47

Java Web 房屋交易平台系统源码-SpringBoot2+Vue3+MyBatis-Plus+MySQL8.0【含文档】

摘要 随着互联网技术的快速发展&#xff0c;房地产行业逐渐向数字化转型&#xff0c;传统的房屋交易模式已无法满足用户对高效、透明和便捷服务的需求。线上房屋交易平台的出现&#xff0c;为用户提供了更加多样化的选择&#xff0c;同时也为开发商和中介机构拓宽了销售渠道。然…

作者头像 李华
网站建设 2026/5/30 1:46:29

5分钟部署Z-Image-ComfyUI,文生图一键生成超清美图

5分钟部署Z-Image-ComfyUI&#xff0c;文生图一键生成超清美图 你是否试过输入一段文字&#xff0c;几秒后眼前就浮现出一张高清、细腻、风格精准的图片&#xff1f;不是模糊的草图&#xff0c;不是失真的构图&#xff0c;而是真正能用在海报、社交配图甚至设计初稿里的成品—…

作者头像 李华
网站建设 2026/6/12 7:16:14

人脸识别OOD模型实际作品:质量分分层抽样生成的特征空间分布热力图

人脸识别OOD模型实际作品&#xff1a;质量分分层抽样生成的特征空间分布热力图 1. 什么是人脸识别OOD模型&#xff1f; 你可能已经用过很多人脸识别系统——刷脸打卡、门禁通行、手机解锁。但有没有遇到过这些情况&#xff1a; 光线太暗时&#xff0c;系统反复提示“请正对镜…

作者头像 李华