剑指 Offer II 085. 生成匹配的括号
方法:递归
解题思路
- 通过选择当前加 '(' 或 ')',递归的计算所有答案。
- 注意:对于 ')' 的选择,只有当前 ')' 数量少于 '(' 时才可以选择;
代码
class Solution {
public:
vector<string> generateParenthesis(int n) {
vector<string> ans;
string str;
function<void(int, int)> dfs = [&](int l, int r) -> void {
if (l == 0 && r == 0) {
ans.push_back(str);
return ;
}
if (l > 0) {
str += '(';
dfs(l - 1, r);
str.pop_back();
}
if (r > 0 && r > l) {
str += ')';
dfs(l, r - 1);
str.pop_back();
}
};
dfs(n, n);
return ans;
}
};
复杂度分析
时间复杂度:\(O(n)\);
空间复杂度:\(O(n)\)。

浙公网安备 33010602011771号