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:
std::vector<std::string> generateParenthesis(int n) {
std::vector<std::string> res;
if(n > 0)
{
dfs(res,"",n,n);
}
return res;
}
private:
void dfs(std::vector<std::string> &res,std::string s, int m, int n)
{
if(m == 0 && n == 0)
{
res.push_back(s);
}
else
{
if(m != 0)
{
dfs(res,s+"(",m-1,n);
}
if(m < n && n != 0)
{
dfs(res,s+")",m,n-1);
}
}
}
};