39. 组合总和
题目描述
给定一个 无重复元素 的整数数组 candidates 和一个目标整数 target,找出 candidates 中所有可以使数字和为 target 的组合。
注意:
candidates中的数字可以重复选取。- 解集不能包含重复的组合。
解题思路
这道题目属于经典的回溯问题。我们需要从数组中选择若干个数字,使它们的和为目标值 target,并且每个数字可以被多次选取。通过回溯法来遍历所有可能的组合。
关键点:
回溯法:每次选择一个数字加入当前组合,并继续递归搜索。由于每个数字可以重复使用,因此我们在递归时从当前位置继续尝试该数字。
剪枝条件:当当前组合的和 sum 大于目标值 target 时,我们就可以直接停止继续递归。
路径恢复:使用回溯时,当某条路径走完之后,需要将当前路径恢复,去除最后一个数字,继续尝试其他数字。
步骤:
递归遍历:从数字数组的第一个元素开始,递归遍历所有可能的组合。每次递归时,尝试当前数字,递归到下一个数字。
回溯:当递归到一个满足条件的组合时,记录当前组合。每次递归返回时,恢复当前路径,继续尝试其他选择。
代码实现
class Solution {
public List<List<Integer>> result = new ArrayList<>();
public LinkedList<Integer> path = new LinkedList<>();
public List<List<Integer>> combinationSum(int[] candidates, int target) {
treebuilding(candidates,target,0,0);
return result;
}
public void treebuilding(int[] candidates, int target,int sum,int startindex) {
if(sum>target){
return;
}
if(sum==target){
result.add(new ArrayList<>(path));
return

最低0.47元/天 解锁文章
731

被折叠的 条评论
为什么被折叠?



