问题描述:
Find all possible combinations of k numbers that add up to a number n, given that only numbers from 1 to 9 can be used and each combination should be a unique set of numbers.
Ensure that numbers within the set are sorted in ascending order.
Example 1:
Input: k = 3, n = 7
Output:
[[1,2,4]]
Example 2:
Input: k = 3, n = 9
Output:
[[1,2,6], [1,3,5], [2,3,4]]
Credits:
Special thanks to @mithmatt for adding this problem and creating all test cases.
分析:这道题的思路比较一般,就是采用DFS的方法来查找,应该还可以剪枝,但是我嫌逻辑麻烦就没有加入。
代码如下:182ms
public class Solution {
List<List<Integer>> res;
List<Integer> tmp;
private void solve(int k,int n,int level,int base){
if(level==k){
if(n==0)
res.add(new LinkedList<>(tmp));
return;
}
for(int i = base;i<10;i++){
tmp.add(i);
solve(k,n-i,level+1,i+1);
tmp.remove(tmp.size()-1);
}
}
public List<List<Integer>> combinationSum3(int k, int n) {
res = new LinkedList<>();
tmp = new LinkedList<>();
solve(k,n,0,1);
return res;
}
}