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

总结

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

相关推荐
文心快码BaiduComate2 分钟前
有奖征集|解锁Comate超能力:一文玩转Comate Skills
前端·后端
StackNoOverflow4 分钟前
Spring Boot 核心知识点总结
java·spring boot·后端
世界哪有真情5 分钟前
使用 Arthas 精准排查 SpringBoot 多模块项目中未使用的类(安全清理无用代码)
java·后端
Coovally AI模型快速验证9 分钟前
检测+跟踪一体化!4.39M参数、8.3W功耗,轻量化模型让无人机在露天矿实时巡检
算法·yolo·无人机·智能巡检·智慧矿山
玛卡巴卡ldf12 分钟前
【LeetCode 手撕算法】(矩阵)73-矩阵置零、54-螺旋矩阵(贪吃蛇)、48-旋转图像
java·数据结构·算法·leetcode·力扣
C^h12 分钟前
RTthread中的内存池理解
linux·数据库·c++·算法·嵌入式
深藏功yu名13 分钟前
Day25(高阶篇):RAG检索与重排序算法精研|从原理到参数调优,彻底攻克检索瓶颈
人工智能·算法·ai·自然语言处理·排序算法·agent
司南-704915 分钟前
claude初探- 国内镜像安装linux版claude
linux·运维·服务器·人工智能·后端
wangchunting15 分钟前
Spring Boot 概述
java·spring boot·后端
JuiceFS16 分钟前
ARM 架构 JuiceFS 性能优化:基于 MLPerf 的实践与调优
后端·性能优化