news 2026/4/18 10:28:56

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/18 8:00:40

02. 缓存行

1.缓存行1.缓存行 CPU读取内存时, 并不是直接一个字节一个字节地读, 而是按照内存总线的位宽(比如64位, 即8字节)来传输数据; 但是CPU的缓存系统(Cache)在从内存中加载数据时, 是以缓存行(Cache Line)为单位的a.内存总线的传输单位: "每次内存读写操作通过总线传输的数据量…

作者头像 李华
网站建设 2026/4/18 8:06:13

32、深入探索vi编辑器:参数配置与命令缩写技巧

深入探索vi编辑器:参数配置与命令缩写技巧 在UNIX系统中,vi编辑器是一款功能强大且广泛使用的工具。它提供了丰富的配置选项和灵活的命令缩写功能,能够极大地提高编辑效率。本文将详细介绍vi编辑器的参数配置和命令缩写的相关知识和操作方法。 1. 配置vi参数 vi编辑器拥有…

作者头像 李华
网站建设 2026/4/18 6:58:34

46、UNIX相关知识与组织介绍

UNIX相关知识与组织介绍 1. 推荐组织 在UNIX相关领域,有许多专业组织发挥着重要作用,以下是一些推荐的组织: | 组织名称 | 简介 | 官网 | | ---- | ---- | ---- | | ACM | 世界上历史最悠久、规模最大的教育和科学计算协会。自1947年以来,ACM为信息、思想和发现的交流…

作者头像 李华
网站建设 2026/4/18 9:41:12

buuctf中的ciscn_2019_en_2

首先checksec检查保护机制&#xff1a;-64位程序-开启了栈不可执行保护接下来使用IDA反汇编工具进行分析&#xff1a;发现begin函数&#xff0c;点进去begin函数内部&#xff1a;输入1可用进入encrypt函数&#xff0c;输入2可从主函数看到并没有什么用&#xff0c;3是退出程序这…

作者头像 李华
网站建设 2026/4/8 12:40:32

Kotaemon面试模拟机器人:AI考官训练求职者

Kotaemon面试模拟机器人&#xff1a;AI考官训练求职者 在招聘旺季&#xff0c;一家科技公司HR每天要筛选上百份简历&#xff0c;安排初面、评估候选人表达能力与逻辑思维。传统流程中&#xff0c;每位候选人的初步沟通至少耗时30分钟&#xff0c;而面试官的主观判断差异又常常导…

作者头像 李华