找出所有相加之和为 n 的 k 个数的组合。组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字。说明:所有数字都是正整数。解集不能包含重复的组合。 示例 1:输入: k = 3, n = 7输出: [[1,2,4]]示例 2:输入: k = 3, n = 9输出: [[1,2,6], [1,3,5], [2,3,4]]
class Solution { private List<List<Integer>> result = new ArrayList(); private LinkedList<Integer> tmpList = new LinkedList(); public List<List<Integer>> combinationSum3(int k, int n) { backtracking(1,k,n,0); return result; } public void backtracking(int startIndex ,int k , int n, int sum){ // 减枝 if (sum > n) { return; } if(tmpList.size() == k){ if(sum == n){ result.add(new ArrayList(tmpList)); } return; } for(int i = startIndex; i <= 9 - (k - tmpList.size()) + 1;i++){ tmpList.add(i); sum += i; backtracking(i+1 , k , n , sum); sum -= i; tmpList.removeLast(); } }}