news 2026/6/10 16:51:32

算法题-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/10 12:35:39

Medusa 智能合约 Fuzzing 工具全流程使用教程

智能合约安全已成为区块链生态系统健康发展的关键环节&#xff0c;而模糊测试技术在漏洞检测中扮演着不可或缺的角色。Medusa 作为新一代智能合约模糊测试工具&#xff0c;正逐渐成为开发者和安全工程师的重要选择。本文将系统介绍 Medusa 的核心功能、安装配置流程及实战应用方…

作者头像 李华
网站建设 2026/6/10 1:51:36

2026全年 AI Agent 每周细化学习计划表

核心原则&#xff1a;每天投入1-2小时&#xff0c;重实战、轻理论堆砌&#xff0c;每周完成1个核心任务1次小结&#xff1b;每阶段结束后预留1周复盘时间&#xff0c;查漏补缺。 第一阶段&#xff1a;理论筑基&#xff08;第1-6周&#xff09;—— 吃透核心概念与基础工具 周…

作者头像 李华
网站建设 2026/6/10 13:42:11

shiro学习要点

一、核心四大功能&#xff08;核心核心&#xff09; 认证&#xff08;Authentication&#xff09;&#xff1a;验证用户身份&#xff08;如账号密码登录&#xff09;&#xff0c;确认 "你是谁"&#xff1b;授权&#xff08;Authorization&#xff09;&#xff1a;验…

作者头像 李华
网站建设 2026/6/10 11:51:38

MusePublic Art Studio实战:设计师必备的AI绘画工具体验

MusePublic Art Studio实战&#xff1a;设计师必备的AI绘画工具体验 你是否经历过这样的时刻&#xff1a;灵感迸发&#xff0c;却卡在把脑海中的画面变成现实的第一步&#xff1f;反复调试参数、折腾环境、翻译提示词、等待渲染……创作热情被技术门槛一点点消磨。直到遇见 Mu…

作者头像 李华
网站建设 2026/6/10 11:50:46

ChatTTS-究极拟真语音合成实战案例:直播带货话术AI语音实时生成

ChatTTS-究极拟真语音合成实战案例&#xff1a;直播带货话术AI语音实时生成 1. 为什么直播带货急需“会呼吸”的AI语音&#xff1f; 你有没有听过那种AI配音&#xff1f;字正腔圆&#xff0c;但听着像在听电子词典朗读新闻——每个字都对&#xff0c;可就是让人想划走。直播间…

作者头像 李华
网站建设 2026/6/10 11:53:15

用万物识别镜像做智能相册,自动标注家庭照片

用万物识别镜像做智能相册&#xff0c;自动标注家庭照片 你是否也经历过这样的困扰&#xff1a;手机相册里存着上千张家庭照片——孩子第一次走路、老人过生日、旅行风景、节日聚餐……每一张都珍贵&#xff0c;却越来越难找&#xff1f;手动打标签太耗时&#xff0c;用手机自…

作者头像 李华