[leetcode]Generate Parentheses

class Solution {
public:
    //p是当前的string( 例如"((()" );k是当前长度,例如4;n是总长度;lMore是左括号比右括号多多少
    void generateParenthesis(string p, int k, int n, int lMore){
        if (lMore < 0)
            return;

        if (k == n){
            if (lMore == 0)
                result.push_back(p);    //如果满足条件,push_back并退出
            return;                        //如果不满足条件,直接退出
        }

        string p2 = p + "(";
        generateParenthesis(p2, k+1, n, lMore+1);

        string p3 = p + ")";
        generateParenthesis(p3, k+1, n, lMore-1);
    }

    vector<string> generateParenthesis(int n) {
        // Start typing your C/C++ solution below
        // DO NOT write int main() function
        result.clear();
        if (n<1)
            return result;
        
        string p;        //p用来存储已经生成的括号对
        p.resize(2*n);
        p.clear();
        generateParenthesis(p, 0, 2*n, 0);

        return result;
    }

private:
    vector<string> result;
};

EOF

原文地址:https://www.cnblogs.com/lihaozy/p/2840399.html