法一:
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() - );
}
}
};