LeetCode第22题括号生成

继续打卡算法题,今天学习的是LeetCode的第22题括号生成,这道题目是道中等题。算法题的一些解题思路和技巧真的非常巧妙,每天看一看算法题和解题思路,我相信对我们的编码思维和编码能力有一些帮助。

分析一波题目

这道题目一看完,刚看感觉好难,但是我们想通了诀窍之后,就非常简单了。

我们第一个字符肯定是左括号(,从第二符号开始,就可能是右括号和左括号了。

我们如果使用树来表示,就可以比较容易理解,以n=3为例,我们不断尝试增加左右括号。

从上图已经可以看出可以继续增加括号的规律:

1、如果右边的括号数小于左边括号的数,可以增加括号

2、如果左边的节点必须小于n,如果大于等于n,不可以增加左括号了,肯定就不符合有效的括号

编码解决

java 复制代码
class Solution {


    public List<String> generateParenthesis(int n) {

        int left = 0;
        int right = 0;
        String s = "";
        List<String> result = new ArrayList<>();
        gen(left, right, n,result, s);
        return result;
    }

    void gen(int left, int right , int n, List<String> result , String s) {

        //符合条件的括号组合
        if(left == n && right == n) {
            result.add(s);
            return;
        }

        //左括号数小于n,可以加左括号
        if(left < n) {
            //左括号+1
            gen(left+1, right, n, result, s+"(");
        }
        //右括号数小于左括号数,可以加右括号
        if(right < left) {
            //右括号+1
            gen(left, right+1, n, result, s+")");
        }
    }
}

总结

一看很难的题目,我们一定要举例推导,查找规律,找到规律就找到解题的诀窍,一下子就茅塞顿开了。

相关推荐
2601_9499506344 分钟前
练题簿在线免费刷题 从资料整理到考前自测
面试·职场和发展·pdf·word·刷题
hetao17338372 小时前
2026-10-03~04 hetao1733837 的刷题记录
c++·算法
卷无止境2 小时前
独立开发者的"富矿地带":哪些垂直领域值得你押注一辈子?
后端·python
Zootopia6262 小时前
飞行力学知识梳理1|飞行性能与稳定性
人工智能·python·算法·机器学习·无人机·学习方法·信息与通信
longlongzihan2 小时前
从LeetCode 70. 爬楼梯看动态规划:如何精准推导状态转移方程?
c++·算法·leetcode·动态规划
时间的拾荒人2 小时前
Qt 多线程详解:从 QThread 到实战
开发语言·qt·面试
海绵宝宝转agent2 小时前
MySql高频面试八股开源笔记总结
mysql·面试·开源
狼爷3 小时前
从零用 Java 构建 AI Agent 框架:JavaManus 设计与实现深度解析
后端·langchain·aigc
郑州光合科技余经理3 小时前
海外版外卖加盟:总站与分站配送规则怎么分开管
java·开发语言·前端·后端·uni-app·php·ai编程
专业程序开发源3 小时前
springboot简历管理系统81389-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·spring·php·课程设计