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);
    }

}

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

相关推荐
云里雾里!5 分钟前
LeetCode 744. 寻找比目标字母大的最小字母 | 从低效到最优的二分解法优化
算法·leetcode
一条大祥脚20 分钟前
26.1.3 快速幂+容斥 树上dp+快速幂 带前缀和的快速幂 正序转倒序 子序列自动机 线段树维护滑窗
数据结构·算法
二狗哈24 分钟前
czsc入门5: Tick RawBar(原始k线) NewBar (新K线)
算法·czsc
Tisfy30 分钟前
LeetCode 0865.具有所有最深节点的最小子树:深度优先搜索(一次DFS + Python5行)
算法·leetcode·深度优先·dfs·题解
Q741_14734 分钟前
C++ 队列 宽度优先搜索 BFS 力扣 429. N 叉树的层序遍历 C++ 每日一题
c++·算法·leetcode·bfs·宽度优先
Yzzz-F35 分钟前
P4145 上帝造题的七分钟 2 / 花神游历各国[线段树 区间开方(剪枝) + 区间求和]
算法·机器学习·剪枝
Zzz不能停37 分钟前
堆排序算法及大小堆区别
数据结构·算法
zd8451015001 小时前
stm32f407 电机多轴联动算法
stm32·单片机·算法
代码游侠1 小时前
应用——Linux FrameBuffer图形显示与多线程消息系统项目
linux·运维·服务器·开发语言·前端·算法
Eloudy1 小时前
矩阵张量积(Kronecker积)的代数性质与定理
算法·量子计算