LeetCode第77题组合

简介: 文章通过树形结构的遍历方法解决了LeetCode第77题"组合",使用递归算法生成所有可能的组合,并总结了将组合问题转换为树遍历的解题技巧。

继续打卡算法题,今天学习的是LeetCode第77题组合,这道题目是道中等题。算法题的一些解题思路和技巧真的非常巧妙,每天看一看算法题和解题思路,我相信对我们的编码思维和编码能力有一些提升。

image.png

分析一波题目

哈哈哈,之前做过组合相关的题目,这个题目就非常简单了,还是一样的套路,我们只要把组合想成一棵树遍历就可以了。

比如 n=4 k=2。

image.png

本题解题技巧

1、将组合问题转换为遍历树的问题,组合问题都可以将其先转换成树形结构,再看是否可以求解。

编码解决

class Solution {
   
   
    public List<List<Integer>> combine(int n, int k) {
   
   

        List<List<Integer>> result = new ArrayList<>();

        List<Integer> subResult= new ArrayList<>();
        getSubResult(result, subResult, 0,n, k);
        return result;
    }

    public void getSubResult(List<List<Integer>> result, List<Integer> subResult,int start,int n, int k) {
   
   
        //满足了组合条件
        if(subResult.size() == k) {
   
   
            result.add(subResult);
            return;
        }

        for(int i=start; i<n; i++) {
   
   
            List<Integer> tempSubResult= new ArrayList<>();
            tempSubResult.addAll(subResult);
            tempSubResult.add(i+1);
            //递归
            getSubResult(result, tempSubResult, i+1,n, k);
        }    
    }
}

总结

1、记住组合问题都可以先转换成树,脑袋里可以把组合组成的过程,转换成一棵树遍历过程。

相关文章
|
7月前
|
定位技术 开发工具
【HarmonyOS】鸿蒙应用实现调用系统地图导航或路径规划
【HarmonyOS】鸿蒙应用实现调用系统地图导航或路径规划
462 5
【HarmonyOS】鸿蒙应用实现调用系统地图导航或路径规划
|
编译器 C++ 开发者
C++一分钟之-C++20新特性:模块化编程
【6月更文挑战第27天】C++20引入模块化编程,缓解`#include`带来的编译时间长和头文件管理难题。模块由接口(`.cppm`)和实现(`.cpp`)组成,使用`import`导入。常见问题包括兼容性、设计不当、暴露私有细节和编译器支持。避免这些问题需分阶段迁移、合理设计、明确接口和关注编译器更新。示例展示了模块定义和使用,提升代码组织和维护性。随着编译器支持加强,模块化将成为C++标准的关键特性。
1230 3
|
11月前
|
存储 SQL 分布式计算
MaxCompute 近实时增全量处理一体化新架构和使用场景介绍
MaxCompute 近实时增全量处理一体化新架构和使用场景介绍
306 0
|
程序员 测试技术 项目管理
项目管理中分工问题如何用RACI责任矩阵解决?
RACI责任矩阵是团队协作中的高效工具,通过明确任务中每个人的角色(负责、批准、咨询、知会),避免责任不清、重复工作和信息不对称等问题。
1051 10
项目管理中分工问题如何用RACI责任矩阵解决?
|
SQL 监控 数据库
慢SQL对数据库写入性能的影响及优化技巧
在数据库管理系统中,慢SQL(即执行缓慢的SQL语句)不仅会影响查询性能,还可能对数据库的写入性能产生显著的不利影响
|
SQL 关系型数据库 MySQL
如何查看SQL字符编码:详细技巧与方法
在SQL数据库管理中,字符编码对于确保数据的正确性和一致性至关重要
1405 5
|
JavaScript 前端开发 搜索推荐
从零开始:用Python和Vue开发个人博客
【4月更文挑战第10天】本文指导无技术背景的读者使用Python和Vue从零开始搭建个人博客。选择Python的Django框架因其易学和高效,通过环境搭建、创建Django项目和应用、定义数据模型、构建Vue前端、整合前后端及部署博客等步骤,逐步实现个人博客的建立。这个过程不仅帮助你分享知识和观点,同时也助力提升编程技能。
420 5
|
Linux Shell 网络安全
Apache Doris集群模式快速体验之CentOS7安装(1)3
Apache Doris集群模式快速体验之CentOS7安装(1)3
493 0
|
算法 Apache
Apache Doris Profile&Explain详解2
Apache Doris Profile&Explain详解2
768 0
|
Rust JavaScript 前端开发
用 Rust 构建你自己的 JavaScript 运行时(1)
在这篇文章中我们将创建一个自定义的 JavaScript 运行时,它能够执行本地 JavaScript 文件,与文件系统交互,并且有一个简化版的 console API。
1056 0