找出所有相加之和为 n 的 k 个数的组合,且满足下列条件:

只使用数字1到9 每个数字 最多使用一次  返回 所有可能的有效组合的列表 。该列表不能包含相同的组合两次,组合可以以任何顺序返回。


示例 1:

输入: k = 3, n = 7 输出: [[1,2,4]] 解释: 1 + 2 + 4 = 7 没有其他符合的组合了。 示例 2:

来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/combination-sum-iii 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。


代码:

class Solution {
   List<List<Integer>> result = new ArrayList<>();
    List<Integer> path = new ArrayList<>();
    public List<List<Integer>> combinationSum3(int k, int n) {
        backtracking(k,n,1,0);
        return result;

    }
    public void backtracking(int k,int n,int startIndex,int sum){//这里的sum直接定义为全局变量,或者作为参数传进来
         if(sum>n) return;//剪枝操作
        if(path.size()==k){
                if(sum==n) result.add(new ArrayList<>(path));//符合条件的,所有数相加之和是n的就添加到结果集合中
                 return;
            }
           
           
        
        for(int i=startIndex; i<=9 - (k - path.size())+1; i++){//这里循环的条件用的是剪枝
            path.add(i);
            sum+=i;//让sum累加,就是添加到了path集合中,就累加
            backtracking(k,n,i+1,sum);//递归
            path.remove(path.size()-1);//回溯
            sum-=i;//回溯
        }
       
    }
}