返回

#yyds干货盘点# leetcode-回溯-39. 组合总和

发布时间:2022-09-17 08:46:47 306
# java# java

本题相当于用给定的数字排列组合看是否可以凑成目标数字,这句话就是回溯的终止语句




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
输出: []
class Solution {
public static List> combinationSum(int[] candidates, int target) {

Deque path = new ArrayDeque<>();
List> res = new ArrayList<>();
backtracking(candidates, target, 0, 0, path, res);
return res;
}

static void backtracking(int[] candidates, int target, int sum, int startIndex, Deque path, List> res) {

if(sum>target){
return;
}

//递归返回
if (sum == target) {
res.add(new ArrayList<>(path));
return;
}

for (int i = startIndex; i < candidates.length; i++) {
sum += candidates[i];
path.addLast(candidates[i]);
backtracking(candidates, target, sum, i, path, res);
//回溯
sum -= candidates[i];
path.removeLast();
}
}
}
特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(0)
按点赞数排序
用户头像
精选文章
thumb 中国研究员首次曝光美国国安局顶级后门—“方程式组织”
thumb 俄乌线上战争,网络攻击弥漫着数字硝烟
thumb 从网络安全角度了解俄罗斯入侵乌克兰的相关事件时间线
下一篇
Linux服务器常用操作 2022-09-17 08:02:10