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.
Note:
- All numbers will be positive integers.
- The solution set must not contain duplicate combinations.
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]]
题解如下:
class Solution {
public List<List<Integer>> combinationSum3(int k, int n) {
List<List<Integer>> res = new ArrayList<>();
List<Integer> tmp = new ArrayList<>();
backtrack(res,tmp,k,n,0);
return res;
}
public void backtrack(List<List<Integer>> res,List<Integer> tmp,
int k,int n,int idx) {
if(k == 0 && n == 0) {
res.add(new ArrayList(tmp));
return;
}
for(int i = idx;i < 9;i++) {
int num = i + 1;
if(k > 0 && n >= num) {
tmp.add(num);
backtrack(res,tmp,k-1,n-num,i+1);
tmp.remove(tmp.size()-1);
}
}
}
}