216. 组合总和 III

文章目录


216. 组合总和 III

思路:

定义一个 combinationSum3 方法,接受两个参数:k 表示组合中的数字个数,n 表示目标和。

在 combinationSum3 方法中,初始化一个空列表 ans 用于存储结果,以及一个空列表 path 用于暂时存储当前的组合。

调用深度优先搜索(DFS)算法 dfs,从数字 1 开始搜索可能的组合。

在 dfs 方法中,首先检查当前和 s 是否为 0,如果是则说明找到了一个符合条件的组合,判断当前组合中数字个数是否等于 k,如果是则将其添加到结果列表中。

然后进行递归搜索,遍历从 i+1 到 9 的所有可能数字,并更新当前和和组合路径。

递归结束后,需要将路径中最后一个数字移除,回溯到上一个状态,继续搜索其他可能的组合。

最后返回结果列表 ans。


java 复制代码
class Solution {
    public List<List<Integer>> combinationSum3(int k, int n) {

        List<List<Integer>> ans = new ArrayList<>();
        List<Integer> path = new ArrayList<>();

        dfs(1,n,ans,path,k);
        return ans;
    }

    public void dfs(int i, int s, List<List<Integer>> ans, List<Integer> path, int k) {
        if (s == 0) {
            if (path.size() == k) {
                ans.add(new ArrayList<>(path));
            }
            return;
        }
        if (i > 9 || i > s || path.size() >= k) {
            return;
        }
        path.add(i);
        dfs(i+1,s-i,ans,path,k);
        path.remove(path.size()-1);
        dfs(i+1,s,ans,path,k);
    }

}

点击移步博客主页,欢迎光临~

相关推荐
为什么这亚子33 分钟前
九、Go语言快速入门之map
运维·开发语言·后端·算法·云原生·golang·云计算
43 分钟前
开源竞争-数据驱动成长-11/05-大专生的思考
人工智能·笔记·学习·算法·机器学习
~yY…s<#>1 小时前
【刷题17】最小栈、栈的压入弹出、逆波兰表达式
c语言·数据结构·c++·算法·leetcode
幸运超级加倍~2 小时前
软件设计师-上午题-16 算法(4-5分)
笔记·算法
yannan201903132 小时前
【算法】(Python)动态规划
python·算法·动态规划
埃菲尔铁塔_CV算法2 小时前
人工智能图像算法:开启视觉新时代的钥匙
人工智能·算法
EasyCVR2 小时前
EHOME视频平台EasyCVR视频融合平台使用OBS进行RTMP推流,WebRTC播放出现抖动、卡顿如何解决?
人工智能·算法·ffmpeg·音视频·webrtc·监控视频接入
linsa_pursuer2 小时前
快乐数算法
算法·leetcode·职场和发展
小芒果_012 小时前
P11229 [CSP-J 2024] 小木棍
c++·算法·信息学奥赛
qq_434085902 小时前
Day 52 || 739. 每日温度 、 496.下一个更大元素 I 、503.下一个更大元素II
算法