剑指 Offer II 085. 生成匹配的括号

题目链接:剑指 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)\)

posted @ 2023-04-17 16:57  lixycc  阅读(37)  评论(0)    收藏  举报