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

总结

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

相关推荐
间彧9 分钟前
Redis Stream相比阻塞列表和发布订阅有哪些优势?适合什么场景?
后端
间彧14 分钟前
Redis阻塞弹出和发布订阅模式有什么区别?各自适合什么场景?
后端
Mr.看海15 分钟前
机器学习鼻祖级算法——使用SVM实现多分类及Python实现
算法·机器学习·支持向量机
苏三说技术22 分钟前
统计接口耗时的6种常见方法
后端
SimonKing27 分钟前
Mybatis-Plus的竞争对手来了,试试 MyBatis-Flex
java·后端·程序员
.格子衫.33 分钟前
018数据结构之队列——算法备赛
数据结构·算法
我命由我1234539 分钟前
PDFBox - PDFBox 加载 PDF 异常清单(数据为 null、数据为空、数据异常、文件为 null、文件不存在、文件异常)
java·服务器·后端·java-ee·pdf·intellij-idea·intellij idea
渣哥43 分钟前
当容器里有多个 Bean,@Qualifier 如何精准定位?
javascript·后端·面试
7哥♡ۣۖᝰꫛꫀꪝۣℋ1 小时前
Spring Boot
java·spring boot·后端
浩泽学编程1 小时前
【源码深度 第1篇】LinkedList:双向链表的设计与实现
java·数据结构·后端·链表·jdk