news 2026/9/3 0:05:17

js.39. 组合总和

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
js.39. 组合总和

链接:39. 组合总和

题目:

给你一个无重复元素的整数数组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输出:[]

提示:

  • 1 <= candidates.length <= 30
  • 2 <= candidates[i] <= 40
  • candidates的所有元素互不相同
  • 1 <= target <= 40

思路:

利用回溯的思想来解决这道题。

我的想法是把每次遍历过的数字放在overlist中保存,

然后去递归。combinationSum(candidates.slice(i), target - candidates[i], [...overList])

代码:

/** * @param {number[]} candidates * @param {number} target * @return {number[][]} */ var combinationSum = function(candidates, target, overList = []) { let result = []; candidates.sort((a,b)=>a-b); for (let i = 0; i < candidates.length; i++) { if(candidates[i] > target) { continue; }else if(candidates[i] == target) { target = target - candidates[i]; overList.push(candidates[i]); break; } overList.push(candidates[i]) let temp = combinationSum(candidates.slice(i), target - candidates[i], [...overList]); result.push(...temp); overList.pop(); } if(target == 0) result.push(overList); return result; };

题解:

var combinationSum = function(candidates, target) { const ans = []; const dfs = (target, combine, idx) => { if (idx === candidates.length) { return; } if (target === 0) { ans.push(combine); return; } // 直接跳过 dfs(target, combine, idx + 1); // 选择当前数 if (target - candidates[idx] >= 0) { dfs(target - candidates[idx], [...combine, candidates[idx]], idx); } } dfs(target, [], 0); return ans; };
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/2 20:41:29

Kotaemon查询扩展技术:Query Expansion提升召回率

Kotaemon查询扩展技术&#xff1a;Query Expansion提升召回率 在企业级智能问答系统日益普及的今天&#xff0c;一个常见的痛点浮出水面&#xff1a;用户问得简单&#xff0c;系统却“听不懂”。比如输入“离职怎么弄&#xff1f;”&#xff0c;背后可能涉及劳动合同解除、社保…

作者头像 李华
网站建设 2026/9/2 23:00:50

Kotaemon科研项目申报书辅助撰写

Kotaemon科研项目申报书辅助撰写 在高校和科研院所&#xff0c;每年一度的国家自然科学基金申报季总伴随着高强度的写作压力。研究人员不仅要构思创新性强的科学问题&#xff0c;还需将复杂的技术路线转化为符合评审规范的文本表达。许多青年学者面对“立项依据怎么写”“创新点…

作者头像 李华
网站建设 2026/9/2 21:29:46

通达信庄散资金流 源码

{}JJ:(HIGHLOWCLOSE)/3; QJ0:AMOUNT/IF(HIGHLOW,4,HIGH-LOW); 主买:ABS(QJ0*(JJ-MIN(CLOSE,OPEN))),COLORRED,LINETHICK0; 主卖:(QJ0*(MIN(OPEN,CLOSE)-LOW)),COLORLIBLUE,LINETHICK0; 散买:(QJ0*(HIGH-MAX(OPEN,CLOSE))),LINETHICK0; 散卖:ABS(QJ0*(MAX(CLOSE,OPEN)-JJ)),COLO…

作者头像 李华
网站建设 2026/9/2 7:17:58

MindSpore案例分享:基于端侧图像分类的智慧园艺应用

一、项目背景与痛点某智慧园艺科技公司在开发智能植物养护系统时&#xff0c;面临核心挑战&#xff1a;需在摄像头设备上实时识别30种常见花卉&#xff0c;以提供针对性养护建议。传统方案采用云端推理&#xff0c;但受网络延迟、隐私及成本限制&#xff0c;难以满足用户对实时…

作者头像 李华
网站建设 2026/9/2 22:22:09

从AI应用需求出发,一文全面理解提示词、上下文工程及RAG

如果prompt、上下文、记忆、知识库、RAG这些概念在你的脑海里也有一些些零碎和杂糅&#xff0c;那么我们不妨一起尝试厘清。 2025年被称为“智能体元年”&#xff0c;在智能体的概念还没有深入人心之前&#xff0c;我们所使用的聊天型应用主要是基于大模型而提供的&#xff0c…

作者头像 李华
网站建设 2026/9/2 22:24:25

FlyMcu-串口下载程序

FlyMcu-串口下载程序让工程生成hex文件勾选Create Hex File编译后就可以在工程目录的Objects目录下找到Hex文件了使用FlyMcu下载程序搜索串口打开对应的hex文件切换boot引脚&#xff0c;使其为boot1点击开始编程&#xff0c;就可成功下载运行程序切换为boot0按一下Reset按键

作者头像 李华