题目描述:
给出 n
代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。
示例:
给出 n = 3,生成结果为:
[
"((()))",
"(()())",
"(())()",
"()(())",
"()()()"
]
解法:
class Solution {
public:
vector<string> generate(int left, int right){
// cout<<left<<", "<<right<<endl;
vector<string> res;
if(left == 0 && right == 0){
return {""};
}
if(left < right){
if(left >= 1){
vector<string> tmp = generate(left-1, right);
for(string s : tmp){
res.push_back('(' + s);
}
}
vector<string> tmp = generate(left, right-1);
for(string s : tmp){
res.push_back(')' + s);
}
}else{
vector<string> tmp = generate(left-1, right);
for(string s : tmp){
res.push_back('(' + s);
}
}
return res;
}
vector<string> generateParenthesis(int n) {
return generate(n, n);
}
};