news 2026/4/23 16:48:54

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/4/23 2:23:15

计算机组成原理要点

计算机组成原理复习要点 课程摘要 本次复习主要围绕计算机组成原理的各个章节展开&#xff0c;包括存储系统、指令系统、中央处理器、输入输出系统等。其中&#xff0c;存储系统部分重点讲解了主存储器、外部存储器以及存储系统的性能指标&#xff1b;指令系统部分强调了指令格…

作者头像 李华
网站建设 2026/4/23 10:10:16

操作系统与数据结构核心知识点解析

操作系统与数据结构核心知识点解析 课程摘要 本文详细解析了操作系统和数据结构的核心知识点&#xff0c;包括操作系统的基本概念、内核与用户模式、中断异常、系统调用、引导过程&#xff0c;以及操作系统的目标和功能。同时&#xff0c;也深入讲解了进程与线程的引入、状态与…

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

Redis篇6——Redis深度剖析:从单机到集群,Redis高可用进化史

在前面的文章中&#xff0c;我们聊了 Redis 的持久化、锁机制以及热 Key 问题。今天&#xff0c;我们跳出具体的命令细节&#xff0c;从宏观架构的角度来看看 Redis 是如何一步步“做大做强”的。在生产环境中&#xff0c;我们几乎不会只部署一台 Redis。为什么&#xff1f;因为…

作者头像 李华
网站建设 2026/4/23 10:11:01

AI 时代,程序员的核心竞争力是什么?

从确定性到概率迷雾 Martin Fowler——《重构》的作者、敏捷宣言的起草人之一&#xff0c;对当前 AI 浪潮发出了警告&#xff1a;这不是工具升级&#xff0c;这是物种突变。我们正在从确定性的工业时代&#xff0c;跌进非确定性的概率迷雾。以前程序员是计算机世界的上帝&#…

作者头像 李华
网站建设 2026/4/23 10:12:24

41、打造出色的 UNIX 系统管理员简历

打造出色的 UNIX 系统管理员简历 在竞争激烈的就业市场中,一份出色的简历是开启理想工作之门的关键。对于 UNIX 系统管理员而言,如何准备一份能吸引潜在雇主目光的简历,是迈向成功职业生涯的重要一步。 简历的基本维护 在当前工作岗位上,要持续更新简历。当参与新项目、…

作者头像 李华
网站建设 2026/4/23 10:13:47

39、Linux Shell 高级特性与技巧解析

Linux Shell 高级特性与技巧解析 1. 数组相关操作 在处理数组时,有时需要对数组元素的输出进行排序。由于数组元素扩展后的结果通常是无序的,所以可以将循环的整个输出通过管道传递给 sort 命令来实现排序。另外,使用 ${!array[@]} 扩展可以得到数组索引列表,而不是数…

作者头像 李华