分析
1.任意前缀中左括号数大于等于右括号数;
2.结果中左括号数等于右括号数。
算法(dfs)代码
class Solution {
public:
vector<string> ans;
void dfs(int l, int r, int n, string s) {
if (l == n && r == n) {
ans.push_back(s);
return;
} else {
if (l < n) dfs(l + 1, r, n, s + "(");
if (l > r && r < n) dfs(l, r + 1, n, s + ")");
}
}
vector<string> generateParenthesis(int n) {
if (n == 0) return ans;
dfs(0, 0, n, "");
return ans;
}
};