题目

image.png

题解

  1. class Solution {
  2. List < List<Integer> > result = new ArrayList<>(); // 存放结果集
  3. LinkedList<Integer> path = new LinkedList<>(); // 符合条件的结果
  4. public List<List<Integer>> combinationSum3(int k, int n) {
  5. backtracking(n,k,0,1);
  6. return result;
  7. }
  8. public void backtracking(int n, int k, int sum, int startIndex ) {
  9. int size = path.size();
  10. if(sum > n ) { // 剪枝操作
  11. return ; // 如果path.size() == k 但sum != targetSum 直接返回
  12. }
  13. if(k == size ) {
  14. if(sum == n) {
  15. result.add(new ArrayList<>(path));
  16. }
  17. return ;
  18. }
  19. for(int i = startIndex; i <= 9 -(k - size ) + 1; i++ ) { //剪枝
  20. sum += i;
  21. path.add(i);
  22. backtracking(n,k,sum,i+1);
  23. sum -= i;
  24. path.removeLast();
  25. }
  26. }
  27. }