class Solution {
List<List<Integer>> res = new ArrayList<>();
LinkedList<Integer> arr = new LinkedList<>();
public List<List<Integer>> combinationSum3(int k, int n) {
findsum(k,n,1,0,0);
return res;
}
public void findsum(int k, int n,int start,int num,int sum){
if(num == k || sum == n){
if(sum != n || num != k) return;
else res.add(new ArrayList<>(arr));
}
for(int i = start;i <= 9;i++){
sum += i;
//剪枝操作,如果sum>n || num + 1 > k直接跳出循环
if(num + 1 > k || sum > n) break;
arr.addLast(i);
findsum(k, n, i + 1, num + 1, sum);
sum -= i;
arr.removeLast();
}
}
}
活学活用,顺便剪个枝
本文介绍了一种解决组合总和III问题的算法实现。通过递归搜索与回溯技术,寻找所有可能的唯一组合,使得k个数字的和等于目标数n。采用剪枝策略提高效率。
759

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



