22. 括号生成

简介: 22. 括号生成

题目描述

数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。


示例 1:


输入:n = 3

输出:[“((()))”,“(()())”,“(())()”,“()(())”,“()()()”]

示例 2:


输入:n = 1

输出:[“()”]


提示:


1 <= n <= 8

解题思路

本题就是一个枚举的过程。

和之前17题一样,dfs进行枚举。不过这个要判断括号是否是合法的——左括号的个数一直小于等于右括号的个数就是合法,只要有一个过程不满足就是错误的。

代码

class Solution {
    vector<string> ret;
public:
    vector<string> generateParenthesis(int n) {
        dfs(n,n,"");
        return ret;
    }
    
    void dfs(int l,int r,string s)
    {
        if(l>r||l<0||r<0) return;
        if(l==r&&l==0)
        {
            ret.push_back(s);
            return;
        } 

        //先加左
        dfs(l-1,r,s+'(');
        //再加右
        dfs(l,r-1,s+')');
    }
};
相关文章
|
1月前
|
Java
有效的括号
本题要求判断一个仅包含 &#39;(&#39;, &#39;)&#39;, &#39;{&#39;, &#39;}&#39;, &#39;[&#39;, &#39;]&#39; 的字符串是否为有效字符串。有效条件是:每个左括号必须被相同类型的右括号正确闭合。空字符串视为有效。示例代码通过栈结构实现,遍历字符串中的每个字符,遇到左括号则将对应的右括号压入栈中,遇到右括号时检查栈顶元素是否匹配,最终栈为空则字符串有效。
7 0
|
4月前
|
存储 算法
LeetCode第20题有效的括号
该文章介绍了 LeetCode 第 20 题有效的括号的解法,通过分析有效括号的特征,使用栈结构存储括号关系,判断遇到右边括号时栈顶是否有匹配的左边括号,从而解决问题,同时总结了栈的先进后出结构可用于解决有规律的符号匹配问题。
LeetCode第20题有效的括号
|
6月前
20. 有效的括号
20. 有效的括号
|
6月前
22.括号生成
22.括号生成
|
7月前
|
C++
去括号问题(C++处理)
去括号问题(C++处理)
98 0
|
C语言 C++
20.有效的括号(LeetCode)
20.有效的括号(LeetCode)
C#基础④——算数运算符(前加、后加、前减、后减)、关系运算符、逻辑表达式
C#基础④——算数运算符(前加、后加、前减、后减)、关系运算符、逻辑表达式
|
数据安全/隐私保护 Python
一日一技:一个括号两种意思,正则表达式奇怪的小括号
一日一技:一个括号两种意思,正则表达式奇怪的小括号
89 0