Leetcode 39 组合总和
2023-12-13 04:10:26
题意理解:
????????一个?无重复元素?的整数数组?
candidates
?和一个目标整数?target
?? ?? ? ? ? 从
candidates
?取数字,使其和==?target
?,有多少种组合(candidates
?中的?同一个?数字可以?无限制重复被选取)? ? ? ? 这道题和之前一道组合的区别:这道题允许重复的数字
解题思路:
? ? ? ? 组合问题——>递归
? ? ? ? 这道题特殊的地方,对组合内数字的和做了要求,而不是个数,一开始并不确定树的深度,组合的大小是不定的。
1.暴力回溯+剪枝优化
class Solution {
List<List<Integer>> result=new ArrayList<>();
LinkedList<Integer> path=new LinkedList<>();
int sum=0;
public List<List<Integer>> combinationSum(int[] candidates, int target) {
backtracking(candidates,target,0);
return result;
}
public void backtracking(int[] candidates,int target,int index){
//结果收集
if(sum==target){
result.add(new ArrayList<>(path));
return;
} else if (sum>target) {//剪枝
return;
}
//遍历分支
for(int i=index;i<candidates.length;i++){
path.add(candidates[i]);
sum+=candidates[i];
//递归
backtracking(candidates,target,i);
//回溯
path.removeLast();
sum-=candidates[i];
}
}
}
2.分析
时间复杂度:O()
? ? ? ? n个位置,每个位置有两种可能选或不选。
? ? ? ? 时间复杂度和树的深度有关,是所有可行解之和
空间复杂度:O(n)
文章来源:https://blog.csdn.net/lt_BeiMo/article/details/134872431
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!