题目:
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:
"((()))", "(()())", "(())()", "()(())", "()()()"
分析:
其实主要是说代码,我一直喜欢用非递归,认为非递归花费时间多一些,但从我最近刷的题来看,递归更节约时间。
代码:
class Solution {
public:
vector<string> generateParenthesis(int n) {
vector<string> res;
if(n<1)return res;
stack<string> record;
stack<int> recordpreint;
stack<int> recordint;
record.push("(");
recordpreint.push(1);
recordint.push(1);
while(!record.empty()){
string tmp=record.top();
int tmpint=recordint.top();
int tmppreint=recordpreint.top();
record.pop();
recordint.pop();
recordpreint.pop();
if(tmp.length()==n*2)res.push_back(tmp);
else {
if(tmppreint<n){
record.push(tmp+'(');
recordint.push(tmpint+1);
recordpreint.push(tmppreint+1);
}
if(tmpint>0){
record.push(tmp+')');
recordint.push(tmpint-1);
recordpreint.push(tmppreint);
}
}
}
return res;
}
};
class Solution {
public:
vector<string> res;
vector<string> generateParenthesis(int n) {
helper("",n,0);
return res;
}
void helper(string s,int left,int right){
if(left==0&&right==0)
res.push_back(s);
else{
if(left)helper(s+'(',left-1,right+1);
if(right)helper(s+')',left,right-1);
}
}
};