less than 1 minute read

<-M 22> Generate Parentheses

// Method 1
class Solution {
public:
    vector<string> generateParenthesis(int n) {
        if(n == 0)
            return vector<string>(1, "");
        if(n == 1)
            return vector<string>(1, "()");
        vector<string> result;

        for(int i = 0; i < n; i++)
            for(auto inner : generateParenthesis(i))
                for(auto outer : generateParenthesis(n - 1 - i))
                    result.push_back("(" + inner + ")" + outer);

        return result;
    }
};

// Method 2
class Solution {
public:
    void bt(int n, int open, int close, string& comb, vector<string>& ans) {
        if (comb.size() == 2 * n ) {
            ans.push_back(comb);
            return;
        }

        if (open < n) {
            comb.push_back('(');
            bt(n, open + 1, close, comb, ans);
            comb.pop_back();
        }

        if (close < open) {
            comb.push_back(')');
            bt(n, open, close+1, comb, ans);
            comb.pop_back();
        }
    }

    vector<string> generateParenthesis(int n) {
        string comb;
        vector<string> ans;
        bt(n, 0, 0, comb, ans);
        return ans;
    }
};