美文网首页
生成括号

生成括号

作者: 静水流深ylyang | 来源:发表于2018-12-15 23:00 被阅读0次

    版权声明:本文为博主原创文章,转载请注明出处。
    个人博客地址:https://yangyuanlin.club
    欢迎来踩~~~~


    题目

    • Generate Parentheses

    Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses.
    For example, given n = 3, a solution set is:
    "((()))", "(()())", "(())()", "()(())", "()()()"

    题目大意

    给定n对括号,编写一个函数来生成所有的符合格式的括号组合。
    上面给出了n = 3的例子。

    思路

    用递归来做。
    注意几点递归条件:
    (1)左右括号均用完是递归出口;
    (2)左括号没有用完就加一个左括号;
    (3)只有右括号少于左括号且右括号没有用完时才能加右括号,因为不能出现“ )( ”这样的情况。

    • 关键:当前位置左括号不少于右括号;
    • 节点:目前位置左括号和右括号数(x,y)(x>=y);
    • 边:从(x,y)到(x+1,y)和(x,y+1),x==y时,没有(x,y+1)这条边;
    • 解:是从(0,0)出发到(n,n)的全部路径。

    代码

    #include<iostream>
    #include<vector>
    using namespace std;
    void help_fun(int, int, string, vector<string >&);
    vector<string> generateParenthesis(int n)
    {
        vector<string > v;
        help_fun(n, n, "", v);
        return v;
    }
    void help_fun(int x, int y, string s, vector<string > &v)
    {
        if(x == 0 && y == 0)
        {
            v.push_back(s);
            return;
        }
        if(x > 0)
            help_fun(x-1, y, s+"(", v);
        if(x<y && y>0)
            help_fun(x, y-1, s+")", v);
    }
    int main()
    {
        vector <string > v;
        int n;
        cin >> n;
        v = generateParenthesis(n);
        for(int i=0; i<v.size(); i++)
        {
            cout<<v[i]<<endl;
        }
        return 0;
    }
    

    以上。


    版权声明:本文为博主原创文章,转载请注明出处。
    个人博客地址:https://yangyuanlin.club
    欢迎来踩~~~~


    相关文章

      网友评论

          本文标题:生成括号

          本文链接:https://www.haomeiwen.com/subject/mtuzhqtx.html