天天看點

backtracking: 22. Generate Parentheses法一:法二:

  • 法一
  • 法二

法一:

class Solution {
public:
    char p[] = {'(', ')'};
    int half;

    void Generate_Parentheses(vector<string> &rel, int stt, int left, int right, int n, string tmp) {
        if(stt == n) {
            if(left == half)
                rel.push_back(tmp);
            return;    
        }

        for(int i = ; i < ; i++) {
            tmp += p[i];
            if((left +  >= right + *i) && (left +  - i <= half)) 
                Generate_Parentheses(rel, stt + , left +  - i, right + i, n, tmp);
            tmp.pop_back();
        }
    }

    vector<string> generateParenthesis(int n) {
        vector<string> rel;
        string tmp;
        half = n;

        Generate_Parentheses(rel, , , , n << , tmp);

        return rel;
    }
};
           

法二:

class Solution {
public:
    vector<string> generateParenthesis(int n) {
        vector<string> res;
        string sol;
        genParen(sol, , , n, res);
        return res;
    }
private:
    void genParen(string& sol, int open, int close, int total, vector<string>& res) {
        if (open == total && close == total) {
            res.push_back(sol);
            return;
        }
        if (open < total) {
            sol += '(';
            genParen(sol, open + , close, total, res);
            sol.resize(sol.length() - );
        }
        if (close < open) {
            sol += ')';
            genParen(sol, open, close + , total, res);
            sol.resize(sol.length() - );
        }
    }
};