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:
"((()))", "(()())", "(())()", "()(())", "()()()"
c++:
class Solution {
public:
vector<string> ret;
void generateHelper(string ans, int left, int right, int n)
{
if(left == right)
{
if(left < n)
{
ans += '(';
generateHelper(ans,left+1,right,n);
}
else
{
ret.push_back(ans);
}
}
else
{
if(left < n)
{
ans += '(';
generateHelper(ans,left+1,right,n);
ans[ans.length()-1] = ')';
generateHelper(ans,left,right+1,n);
}
else
{
ans += ')';
generateHelper(ans,left,right+1,n);
}
}
}
vector<string> generateParenthesis(int n) {
ret.clear();
if(n == 0)
{
return ret;
}
string ans="";
generateHelper(ans,0,0,n);
return ret;
}
};