当前位置:网站首页>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;
};
边栏推荐
- Modify the video name from the name mapping relationship in the table
- C language double pointer -- classic question type
- Sublime text using ctrl+b to run another program without closing other runs
- TP-LINK enterprise router PPTP configuration
- 深度剖析C语言数据在内存中的存储
- [embedded] cortex m4f DSP Library
- 如何有效地进行自动化测试?
- 704 二分查找
- LeetCode:673. 最长递增子序列的个数
- [brush questions] top101 must be brushed in the interview of niuke.com
猜你喜欢

Sort according to a number in a string in a column of CSV file

Using pkgbuild:: find in R language_ Rtools check whether rtools is available and use sys The which function checks whether make exists, installs it if not, and binds R and rtools with the writelines

LeetCode:236. 二叉树的最近公共祖先

pcd转ply后在meshlab无法打开,提示 Error details: Unespected eof

可变长参数

LeetCode:124. 二叉树中的最大路径和

【ROS】usb_cam相机标定

The ECU of 21 Audi q5l 45tfsi brushes is upgraded to master special adjustment, and the horsepower is safely and stably increased to 305 horsepower

Cisp-pte practice explanation

查看局域网中电脑设备
随机推荐
Swagger setting field required is mandatory
Bottom up - physical layer
Double pointeur en langage C - - modèle classique
Research Report on supply and demand and development prospects of China's high purity aluminum market (2022 Edition)
JVM performance tuning and practical basic theory - Part 1
pcd转ply后在meshlab无法打开,提示 Error details: Unespected eof
Sublime text using ctrl+b to run another program without closing other runs
How to effectively conduct automated testing?
移位运算符
Visual implementation and inspection of visdom
egg. JS directory structure
Target detection - pytorch uses mobilenet series (V1, V2, V3) to build yolov4 target detection platform
Research Report on Market Research and investment strategy of microcrystalline graphite materials in China (2022 Edition)
Deep analysis of C language pointer
MySQL learning record 11jdbcstatement object, SQL injection problem and Preparedstatement object
To effectively improve the quality of software products, find a third-party software evaluation organization
C语言双指针——经典题型
FairGuard游戏加固:游戏出海热潮下,游戏安全面临新挑战
C語言雙指針——經典題型
生成器参数传入参数