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:
void generate(vector<string> & res, string one,
int left, int right, int n)
{
if(left == n && right == n)
{
res.push_back(one);
return;
}
if(left < n)
{
generate(res, one+'(', left+1,right, n);
}
if(left > right)
{
generate(res, one +')', left,right+1, n);
}
}
vector<string> generateParenthesis(int n)
{
vector<string> res;
generate(res, "", 0,0,n);
return res;
}
};
BFS Solution :find the last occurrence position P of '(' in the previous result, and append '(' + the rest + ')' to it from P+1 to end;
class Solution {
public:
vector<string> generateParenthesis(int n)
{
vector<string> res;
res.push_back("");
for(int i=0;i<n;i++)
{
vector<string> tmp;
for(int j=0;j<res.size();j++)
{
int pos = res[j].rfind('(');
for(int k=pos+1;k<=res[j].size();k++)
{
tmp.push_back(res[j].substr(0,k) +
'(' + res[j].substr(k) + ')');
}
}
res = tmp;
}
return res;
}
};