1 题目
Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses.
For example, given n = 3, a solution set is:
[ "((()))", "(()())", "(())()", "()(())", "()()()" ]
2 尝试解
class Solution {
public:
vector<string> generateParenthesis(int n) {
vector<string> result;
string temp = "";
generate(n,result,temp);
return result;
}
void generate(int n,vector<string> &result,string &temp){
if(temp.size() == 2*n){
if(valid(temp)) result.push_back(temp);
return;
}
else{
temp.push_back('(');
generate(n,result,temp);
temp.pop_back();
temp.push_back(')');
generate(n,result,temp);
temp.pop_back();
}
}
bool valid(string temp){
stack<char> saver;
for(int i =0 ; i < temp.size(); i++){
if(temp[i] == '(')
saver.push(temp[i]);
else{
if(saver.empty()) return false;
else{
saver.pop();
}
}
}
return saver.empty()?true:false;
}
};
3 标准解
class Solution {
public:
vector<string> generateParenthesis(int n) {
vector<string> res;
addingpar(res, "", n, 0);
return res;
}
void addingpar(vector<string> &v, string str, int n, int m){
if(n==0 && m==0) {
v.push_back(str);
return;
}
if(m > 0){ addingpar(v, str+")", n, m-1); }
if(n > 0){ addingpar(v, str+"(", n-1, m+1); }
}
};