LeetCode22. 括号生成(2024冬季每日一题 2)

数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。

示例 1:

输入:n = 3

输出:"((()))","(()())","(())()","()(())","()()()"

示例 2:

输入:n = 1

输出:"()"

提示:

1 < = n < = 8 1 <= n <= 8 1<=n<=8


思路

  • dfs 搜索所有可能的括号组合
  • 提前剪枝不可能复合条件的分支
    1. 剩余的左括号树必须小于等于右括号树(否则会有先右再左的情况)
    1. 在1.的条件下剩余左括号数量不为0时,则先遍历下一个符号为'('的分支,再遍历下一个符号为')'的分支
    1. 当剩余左右括号的数量都为0时,记录当前答案,加入答案数组中
cpp 复制代码
class Solution {
public:
    vector<string> generateParenthesis(int n) {
        vector<string> v;
        dfs(v, "", n, n);
        return v;
    }
    void dfs(vector<string> &v, string s, int lc, int rc){
        if(lc == 0 && rc == 0){
            v.push_back(s);
            return;
        }
        if(lc != 0) dfs(v, s + '(', lc - 1, rc);
        if(rc != 0 && rc - 1 >= lc){
            dfs(v, s + ')', lc, rc - 1);
        }
    }
};
相关推荐
_清歌1 天前
DSpark 深度解读:DeepSeek-V4 如何用「半自回归」把推理速度提升 85%
算法
统计实现局1 天前
SVD 的三步走:双对角化、Givens 收敛、排序
算法
躬行见万象1 天前
《VLA 系列》UniLab 强化训练 | G1 机器人 |复现
算法
统计实现局1 天前
对称不定分解(Bunch-Kaufman):为什么 Cholesky 不够用
算法
统计实现局1 天前
dqrsl 拆解:拿着 QR 结果能算出哪 5 种东西
算法
统计实现局1 天前
为什么 Cholesky 求逆比 Gauss-Jordan 快一倍——行列式溢出防护详
算法
To_OC1 天前
LC 994 腐烂的橘子:人人都说是 BFS 入门题,我却写了三遍才过
javascript·算法·leetcode
金銀銅鐵2 天前
[Python] 扩展欧几里得算法
python·数学·算法
To_OC2 天前
LC 200 岛屿数量:经典 DFS 入门题,我第一次写居然连方向都搞错了
javascript·算法·leetcode