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. 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]] 翻译:从1-9中间选择k个数,这些数字之和为n,且这k个数字无重复。
publicstatic List<list <Integer>> combinationSum3(int k, int n){
List<integer> list =new ArrayList</integer><integer>();
List<list <Integer>> result =new ArrayList</list><list <Integer>>();if(n < k *(k -1)/2)return result;
result = search(k, n, 1, 0, list, result);return result;}publicstatic List<List<Integer>> search(int k, int n, int cur, int sum, List<integer> list,
List<list <Integer>> result){if(k ==0)return result;for(int i = cur; i <=9; i++){if(sum + i < n){
sum += i;
list.add(i);
result = search(k -1, n, i +1, sum, list, result);
list.remove(list.size()-1);
sum -= i;}elseif(sum + i == n && k ==1){
list.add(i);
result.add(new ArrayList<Integer>(list));
list.remove(list.size()-1);}elsebreak;}return result;}