题解:
class Solution {
public:
vector<string> generateParenthesis(int n) {
vector<string> vec;
string str = "";
dfs(vec, str, n, n);
return vec;
}
void dfs(vector<string> &vec, const string &res, int left, int right) {
if (left == 0 && right == 0) {
vec.emplace_back(res);
return;
}
if (left == right) {
// 左右括号相等时,只能增加左括号
dfs(vec, res+'(', left-1, right);
} else if (left < right) {
// 左括号小于右括号时,可增加左或右括号
if (left > 0)
// 增加左括号
dfs(vec, res+'(', left-1, right);
dfs(vec, res+')', left, right-1);
}
}
};