Leetcode:括号生成

题目链接:22. 括号生成 - 力扣(LeetCode)

题目分析

1、括号的类型只有()一种,没有{}或者\[\]

2、括号可以进行多层嵌套

3、有效的括号组合需要满足以下两个条件***(任意一个子串)***

  • 总体上,左括号数量 == 右括号数量
  • 从左向右开始数一个子串时,在任意时刻,左括号的数量 >= 右括号数量

4、当我们开始进行生成时,会出现下图所示的过程:

  • 当left大于等于n时就不能再添加左括号
  • 当right大于等于left时也不能添加左括号
  • 当right==n时开始回退***(因为先添加的肯定是左括号,所以后添加的右括号都等于n了,那么左括号应该也满足了)***

普通版本(回溯)

cpp 复制代码
class Solution {
    int left,right,m;
    string path;//每一条路径上的最终结果
    vector<string> res;//最终结果
public:
    vector<string> generateParenthesis(int n) {
       m = n;
       dfs();//当dfs函数走完后所有的括号就完成了括号的组成
       return res;
    }

    void dfs()
    {
        if(right == m)
        {
            res.push_back(path);//将当前组合完成的子串尾插给最终结果
            return;
        }

        if(left < m)//用递归添加左括号
        {
            path.push_back('(');
            ++left;
            dfs();
            path.pop_back();
            --left;
        }

        if(right < left)//添加右括号
        {
            path.push_back(')');
            ++right;
            dfs();
            path.pop_back();
            --right;
        }
    }
};

优化版本(待补充)

~over~

相关推荐
玖玥拾22 分钟前
LeetCode 202 快乐数
算法·leetcode
LuminousCPP26 分钟前
数据结构-二叉树(六):BFS层序遍历与完全二叉树判断|复用链式队列 + (N_0=N_2+1) 性质证明
c语言·数据结构·笔记·算法·二叉树·宽度优先
ZhouDevin1 小时前
算法论文/数据集3——CLD(TMLR2025)压缩训练集,仅保留对验证集有益的样本
人工智能·深度学习·算法·计算机视觉
Tim_102 小时前
【LeetCode】29、两数相除
算法·leetcode·职场和发展
船厂电气自动化ai大模型3 小时前
AI大模型与数学/第63课:矩阵定义、矩阵加法、标量乘法(逐级精讲)
数据结构·人工智能·深度学习·线性代数·算法
余额瞒着我当琳3 小时前
算法修炼 chapter 2 双指针进阶、盛最多水的容器、有效三角形的个数、两数之和、三数之和、四数之和
算法
你压到我腿毛了6663 小时前
C语言冒泡算法(Bubble sort)
c语言·数据结构·算法
靠沿4 小时前
贪心算法专题(三)
算法·贪心算法
super大力张4 小时前
MOE基于结构的药物设计(七):Ligand R-Vectors——如何判断配体可以从哪里继续生长?
数据库·算法·cadd·moe·svl·基于结构的药物设计
Tongsr5 小时前
别只混淆代码:用 Kaleido 加固整个 Android Release AAB
前端·算法·github