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:
[ "((()))", "(()())", "(())()", "()(())", "()()()" ]
思路:很显然用递归的思想。从左往右添加括号,令l=左括号数,r为右括号数。加一个左括号则l-1。递归的返回点是:l==0&&r==0。
其次保证递归中l>=r。
vector<string>res;
void dfs(string temp,int l,int r)
{
if(l>r)
return ;
if(l>0)
dfs(temp+'(',l-1,r);
if(r>0)
dfs(temp+')',l,r-1);
if(l==0&&r==0)
{
res.push_back(temp);
return;
}
}
vector<string> generateParenthesis(int n)
{
if(n<=0)
return res;
dfs("",n,n);
return res;
}
void main()
{
vector<string>vec=generateParenthesis(3);
for(int i=0;i<vec.size();i++)
cout<<vec[i]<<endl;
}