当前位置:网站首页>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;
};
边栏推荐
- After PCD is converted to ply, it cannot be opened in meshlab, prompting error details: ignored EOF
- Delay initialization and sealing classes
- Precise query of tree tree
- 查看局域网中电脑设备
- Process of obtaining the electronic version of academic qualifications of xuexin.com
- @Jsonbackreference and @jsonmanagedreference (solve infinite recursion caused by bidirectional references in objects)
- LeetCode:387. 字符串中的第一个唯一字符
- 704 二分查找
- ROS compilation calls the third-party dynamic library (xxx.so)
- Current situation and trend of character animation
猜你喜欢

查看局域网中电脑设备

Deep analysis of C language pointer

Guangzhou will promote the construction of a child friendly city, and will explore the establishment of a safe area 200 meters around the school

ROS compilation calls the third-party dynamic library (xxx.so)

广州推进儿童友好城市建设,将探索学校周边200米设安全区域

【嵌入式】使用JLINK RTT打印log

【ROS】usb_ Cam camera calibration

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

vb. Net changes with the window, scales the size of the control and maintains its relative position

JVM quick start
随机推荐
View computer devices in LAN
How to conduct interface test? What are the precautions? Nanny level interpretation
延迟初始化和密封类
C语言双指针——经典题型
个人电脑好用必备软件(使用过)
swagger设置字段required必填
【Nvidia开发板】常见问题集 (不定时更新)
自动化测试框架有什么作用?上海专业第三方软件测试公司安利
ROS编译 调用第三方动态库(xxx.so)
Deep anatomy of C language -- C language keywords
Mobile phones and computers on the same LAN access each other, IIS settings
Swagger setting field required is mandatory
Detailed explanation of heap sorting
Problems in loading and saving pytorch trained models
C語言雙指針——經典題型
704 binary search
被破解毁掉的国产游戏之光
广州推进儿童友好城市建设,将探索学校周边200米设安全区域
LeetCode:394. 字符串解码
LeetCode:236. 二叉树的最近公共祖先