原题链接:https://oj.leetcode.com/problemset/algorithms/
这里用递归的方法实现。递归函数签名为void generate(int left, int right, int n, string prev)
1. left,right分别为当前左右括号的个数,prev缓存之前的临时结果
2. left小于n的时候,可以一直加入左括号
3. right必须小于left的个数的时候,才可以加入
4. 当right的个数等于n的时候,说明当前生成结束
class Solution {
private:
vector<string> res;
public:
vector<string> generateParenthesis(int n) {
generate(0, 0, n, "");
return res;
}
void generate(int left, int right, int n, string prev) {
if (right == n) {
res.push_back(prev);
}
if (left < n) {
prev.push_back('(');
generate(left + 1, right, n, prev);
prev.pop_back();
}
if (left > right) {
prev.push_back(')');
generate(left, right + 1, n, prev);
}
}
};