当前位置:网站首页>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;
};
边栏推荐
- 【ROS】usb_ Cam camera calibration
- JVM performance tuning and practical basic theory - Part 1
- After PCD is converted to ply, it cannot be opened in meshlab, prompting error details: ignored EOF
- 广州推进儿童友好城市建设,将探索学校周边200米设安全区域
- Precise query of tree tree
- LeetCode:673. 最长递增子序列的个数
- Variable length parameter
- 同一局域网的手机和电脑相互访问,IIS设置
- China's high purity aluminum target market status and investment forecast report (2022 Edition)
- [MySQL] log
猜你喜欢

704 二分查找

游戏解包的危害及资源加密的重要性

vb.net 随窗口改变,缩放控件大小以及保持相对位置

深度剖析C语言指针

JVM quick start

sublime text的编写程序时的Tab和空格缩进问题

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

【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

Excellent software testers have these abilities
随机推荐
LeetCode:26. 删除有序数组中的重复项
Esp8266-rtos IOT development
Analysis of the source code of cocos2d-x for mobile game security (mobile game reverse and protection)
JS inheritance method
C语言双指针——经典题型
LeetCode:34. 在排序数组中查找元素的第一个和最后一个位置
Double pointeur en langage C - - modèle classique
China dihydrolaurenol market forecast and investment strategy report (2022 Edition)
Browser thread
View computer devices in LAN
LeetCode:394. 字符串解码
sublime text中conda环境中plt.show无法弹出显示图片的问题
The mysqlbinlog command uses
@Jsonbackreference and @jsonmanagedreference (solve infinite recursion caused by bidirectional references in objects)
[NVIDIA development board] FAQ (updated from time to time)
gcc动态库fPIC和fpic编译选项差异介绍
R language ggplot2 visualization: place the title of the visualization image in the upper left corner of the image (customize Title position in top left of ggplot2 graph)
Restful API design specification
Modify the video name from the name mapping relationship in the table
Delay initialization and sealing classes