回溯算法题(2)组合求和III

目录

组合求和III

描述

说明

示例 1

示例 2

方法:回溯


组合求和III

描述

找出所有相加之和为 n 的 k 个数的组合。

组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字。

说明

所有数字都是正整数。
解集不能包含重复的组合。 ll

示例 1

输入: k = 3, n = 7
输出: [[1,2,4]]

示例 2

输入: k = 3, n = 9
输出: [[1,2,6], [1,3,5], [2,3,4]]

方法:回溯

回溯+剪枝

class Solution {
    public List<List<Integer>> combinationSum3(int k, int n) {
        List<List<Integer>> res=new ArrayList<>();
        dfs(res,new ArrayList<>(),k,1,n);
        return res;
    }

    private void dfs(List<List<Integer>> res, List<Integer> list, int k, int i, int n) {
        if (n<=0){
            if (list.size()==k && n==0){
                res.add(new ArrayList<>(list));//添加到结果中
            }
            return;//n<0直接剪枝
        }
        for (int j = i; j < 10; j++) {
            list.add(j);//选择当前元素
            dfs(res,list,k,j+1,n-j);//递归
            list.remove(list.size()-1);//回溯
        }
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_39478524/article/details/121381146