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:
[ "((()))", "(()())", "(())()", "()(())", "()()()" ]
题意:
给出n,输出由n个括号组成的所有合法组合。
分析:
只要保证对于任意前缀 ) 字符个数都不得多余 ) 字符个数。
dfs,很容易就过了,a纪录还需要多少(,b纪录当前还可以放置多少)。
代码:
class Solution {
public:
char buf[100000];
void dfs(int index,int a,int b,int n,vector<string>&ans){
if(index == n){
ans.push_back(buf);
return;
}
if(a != 0){
buf[index] = '(';
dfs(index+1,a-1,b+1,n,ans);
}
if(b != 0){
buf[index] = ')';
dfs(index+1,a,b-1,n,ans);
}
}
vector<string> generateParenthesis(int n) {
vector<string> ans;
buf[2*n]='\0';
dfs(0,n,0,2*n,ans);
return ans;
}
};