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

总结

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

相关推荐
NiNg_1_23437 分钟前
SpringBoot整合SpringSecurity实现密码加密解密、登录认证退出功能
java·spring boot·后端
pianmian137 分钟前
python数据结构基础(7)
数据结构·算法
Chrikk2 小时前
Go-性能调优实战案例
开发语言·后端·golang
幼儿园老大*2 小时前
Go的环境搭建以及GoLand安装教程
开发语言·经验分享·后端·golang·go
canyuemanyue2 小时前
go语言连续监控事件并回调处理
开发语言·后端·golang
杜杜的man2 小时前
【go从零单排】go语言中的指针
开发语言·后端·golang
好奇龙猫3 小时前
【学习AI-相关路程-mnist手写数字分类-win-硬件:windows-自我学习AI-实验步骤-全连接神经网络(BPnetwork)-操作流程(3) 】
人工智能·算法
sp_fyf_20243 小时前
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-11-01
人工智能·深度学习·神经网络·算法·机器学习·语言模型·数据挖掘
香菜大丸4 小时前
链表的归并排序
数据结构·算法·链表
jrrz08284 小时前
LeetCode 热题100(七)【链表】(1)
数据结构·c++·算法·leetcode·链表