classSolution{ // 用于存储所有可能的组合结果的列表 privatefinal List<List<Integer>> ans = new ArrayList<>(); // 用于存储当前路径的列表 privatefinal List<Integer> path = new ArrayList<>(); // 需要选取的数字个数 int k;
// 主要方法,寻找所有 k 个数的组合,使其和为 n public List<List<Integer>> combinationSum3(int k, int n) { this.k = k; // 开始深度优先搜索,初始状态为数字 9 和目标和 n dfs(9, n); return ans; }
// 深度优先搜索方法 privatevoiddfs(int i, int t){ // 还需要选取的数字个数 int d = k - path.size();
// 剪枝条件:如果剩余的和 t < 0 或者剩余的和 t 超过从 i 到 i-d+1 的 d 个数的和 if (t < 0 || t > (i * 2 - d + 1) * d / 2) { return; }