Generate Parentheses
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:
"((()))", "(()())", "(())()", "()(())", "()()()"
递归,用变量str来保存当前的括号样式,之后str会有两种变化,一种后边跟(,一种后边跟)。用两个数l,r记录左右括号的个数,如果l<r说明是非法的,如果l=r=n,说明是成功的,将str存入。
vector<string> generateParenthesis(int n) {
vector<string> vec;
findit(n, 0, 0, "", vec);
return vec;
}
void findit(int n, int l, int r, string str, vector<string> &vec){
if(l < r)
return;
if(l + r == n * 2){
if(l == n)
vec.push_back(str);
return;
}
findit(n, l+1, r, str+"(", vec);
findit(n, l, r+1, str+")", vec);
}