22. Generate Parentheses

来源:互联网 发布:nginx alias用法 编辑:程序博客网 时间:2024/05/21 00:47

1刷
就是求全部的组合

思路是递归,如果l和r同时为0代表这个是其中之一的答案
如果l大于0,则可以递归加上(
如果r大于0且大于l(一定要大于l,否则不能加),会出现矛盾),则递归加上)

class Solution {public:    void generalit(vector<string>&v, string s, int l, int r)    {        if(l == 0 && r == 0)            v.push_back(s);        if(l > 0)            generalit(v, s + "(", l - 1, r);        if(r > 0 && r > l)            generalit(v, s + ")", l, r - 1);    }    vector<string> generateParenthesis(int n) {        vector<string>v;        generalit(v, "", n, n);        return v;    }};

2刷
1刷的时候记得想了好久,2刷能够直接写出,很好,3刷也可以简单在刷一次就够了

class Solution {public:    vector<string>ve;    void makeit(string s, int length, int now, int n, int nowl, int nowr){        if(length == now){            ve.push_back(s);            return ;        }        if(nowl < n) makeit(s + "(", length, now + 1, n, nowl + 1, nowr);        if(nowl > nowr) makeit(s + ")", length, now + 1, n , nowl, nowr + 1);    }    vector<string> generateParenthesis(int n) {        makeit("(", n * 2, 1, n, 1, 0);        return ve;    }};
0 0
原创粉丝点击