当前位置:   article > 正文

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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/605009
推荐阅读
相关标签
  

闽ICP备14008679号