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:
[
“((()))”,
“(()())”,
“(())()”,
“()(())”,
“()()()”
]
本题的核心就是判断什么时候可以放入右括号,只有在剩余右括号的数>0,并且剩余的左括号小于右括号的情况下才能加入右括号。试想如果剩余的左括号大于右括号这种情况已经不能完成匹配。
采用递归的方法。
class Solution {
public:
void generate(int l, int r, string s, vector<string> &ret){
if(l == 0 && r == 0){
ret.push_back(s);
}
if(l>0) generate(l-1,r,s+"(", ret);
if(r>0 && l<r) generate(l,r-1,s+")",ret);
}
public:
vector<string> generateParenthesis(int n) {
vector<string> res;
if(n>0) generate(n, n, "", res);
return res;
}
};