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