题目描述:
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:
[
“((()))”,
“(()())”,
“(())()”,
“()(())”,
“()()()”
]
分析:根据括号匹配的规律,dfs即可。
代码如下:
void dfs(int n1,int n2,int n,vector<string>& res,string p){
if(p.length()==n*2){
res.push_back(p);
return ;
}
if(n1<n2&&n1<n){
n1++;
p+=')';
dfs(n1,n2,n,res,p);
int len=p.length()-1;
p=p.substr(0,len);
n1--;
}
if(n2<n){
n2++;
p+='(';
dfs(n1,n2,n,res,p);
int len=p.length()-1;
p=p.substr(0,len);
n2--;
}
}
vector<string> generateParenthesis(int n) {
vector<string> res;
if(n<=0) return res;
string temp;
dfs(0,0,n,res,temp);
return res;
}