当前位置:网站首页>LeetCode:39. 组合总和
LeetCode:39. 组合总和
2022-07-06 08:44:00 【Bertil】
给你一个 无重复元素 的整数数组 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
- 1 <= candidates[i] <= 200
- candidate 中的每个元素都 互不相同
- 1 <= target <= 500
解题思路
1.使用回溯(即DFS用约束条件做剪枝):首先对数组进行升序,然后定义递归函数,但须注意:数字可以被重复使用,所以每次递归,传入的起点是i
2.利用两个条件做剪枝,即递归出口:
- 满足条件,拷贝一份放入结果数组
- 剩余的目标数小于当前元素,后面的元素只会更大,直接放弃此轮
回溯和DFS,其主要的区别是,回溯法在求解过程中不保留完整的树结构,而深度优先搜索则记下完整的搜索树
代码
/** * @param {number[]} candidates * @param {number} target * @return {number[][]} */
var combinationSum = function(candidates, target) {
const res = [];
// 升序排序
candidates.sort((a, b) => a - b);
const search = (path, target, start) => {
if (target === 0) {
// 满足条件,拷贝一份放入结果数组
res.push([...path]);
return;
}
// 注意起点为start
for (let i = start; i < candidates.length; i++) {
// 剩余的目标数小于当前元素,后面的元素只会更大,直接放弃此轮
if (target < candidates[i]) return;
path.push(candidates[i]);
// 数字可以重复,所以传入i
search(path, target - candidates[i], i);
path.pop();
}
};
search([], target, 0);
return res;
};
边栏推荐
- Revit secondary development Hof method calls transaction
- JVM performance tuning and practical basic theory - Part 1
- 生成器参数传入参数
- pytorch训练好的模型在加载和保存过程中的问题
- sublime text没关闭其他运行就使用CTRL+b运行另外的程序问题
- Research Report on Market Research and investment strategy of microcrystalline graphite materials in China (2022 Edition)
- LeetCode:162. 寻找峰值
- 同一局域网的手机和电脑相互访问,IIS设置
- China dihydrolaurenol market forecast and investment strategy report (2022 Edition)
- 【Nvidia开发板】常见问题集 (不定时更新)
猜你喜欢

Computer cleaning, deleted system files

Analysis of the source code of cocos2d-x for mobile game security (mobile game reverse and protection)

MySQL learning records 12jdbc operation transactions

目标检测——Pytorch 利用mobilenet系列(v1,v2,v3)搭建yolov4目标检测平台

sublime text没关闭其他运行就使用CTRL+b运行另外的程序问题

swagger设置字段required必填

软件卸载时遇到trying to use is on a network resource that is unavailable

Navicat premium create MySQL create stored procedure

visdom可视化实现与检查介绍

【嵌入式】使用JLINK RTT打印log
随机推荐
704 二分查找
704 binary search
LeetCode:236. 二叉树的最近公共祖先
gcc动态库fPIC和fpic编译选项差异介绍
按位逻辑运算符
如何有效地进行自动化测试?
Precise query of tree tree
被破解毁掉的国产游戏之光
How to effectively conduct automated testing?
Tcp/ip protocol
Shift Operators
Light of domestic games destroyed by cracking
同一局域网的手机和电脑相互访问,IIS设置
Indentation of tabs and spaces when writing programs for sublime text
Image, CV2 read the conversion and size resize change of numpy array of pictures
sys. argv
PC easy to use essential software (used)
Guangzhou will promote the construction of a child friendly city, and will explore the establishment of a safe area 200 meters around the school
Promise 在uniapp的简单使用
Visual implementation and inspection of visdom