【Leetcode每日一题】 综合练习 - 括号生成(难度⭐⭐)(76)

news2025/1/24 3:05:38

1. 题目解析

题目链接:22. 括号生成

这个问题的理解其实相当简单,只需看一下示例,基本就能明白其含义了。

2.算法原理

问题描述

我们需要找出所有可能的、有效的括号序列。一个有效的括号序列指的是一个仅由'('和')'组成的字符串,并且满足以下条件:

  1. 左括号的数量始终大于等于右括号的数量,从左到右遍历字符串时。
  2. 左括号的总数与右括号的总数相等。
递归策略

我们采用递归的方法来解决这个问题。递归的核心在于,在每一步,我们都有两种选择:放置一个左括号或(在条件允许的情况下)放置一个右括号。

递归函数设计
void dfs(std::string& current, int step, int left)
  • current: 存储当前构建的括号序列的字符串。
  • step: 当前需要填入的位置(即current字符串的长度)。
  • left: 当前状态的字符串中已放置的左括号数量。
递归流程
  1. 递归结束条件
    • step等于目标长度(即2倍的括号对数)时,检查current是否为一个有效的括号序列。如果是,则将其加入答案列表中。
  2. 放置左括号
    • 如果left小于目标长度的一半(即剩余的位置足够放置等量的右括号),则可以在current的第step个位置放置一个左括号,并递归调用dfs函数,参数更新为step+1left+1。递归完成后,需要撤销这个左括号的放置,以便尝试其他可能性。
  3. 放置右括号
    • 如果当前已放置的右括号数量(step - left)小于已放置的左括号数量left,则可以在current的第step个位置放置一个右括号,并递归调用dfs函数,参数更新为step+1left(因为右括号的放置不影响左括号的数量)。同样,递归完成后需要撤销这个右括号的放置。

决策树的演示:

3.代码编写

class Solution {
    int left, right, n;
    string path;
    vector<string> ret;

public:
    vector<string> generateParenthesis(int _n) {
        n = _n;
        dfs();
        return ret;
    }
    void dfs() {
        if (right == n) {
            ret.push_back(path);
            return;
        }
        if (left < n) // 添加左括号
        {
            path.push_back('(');
            left++;
            dfs();
            path.pop_back();
            left--; // 恢复现场
        }
        if (right < left) // 添加右括号
        {
            path.push_back(')');
            right++;
            dfs();
            path.pop_back();
            right--; // 恢复现场
        }
    }
};

The Last

嗯,就是这样啦,文章到这里就结束啦,真心感谢你花时间来读。

觉得有点收获的话,不妨给我点个吧!

如果发现文章有啥漏洞或错误的地方,欢迎私信我或者在评论里提醒一声~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1681304.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

高效协同,智慧绘制:革新型流程图工具全解析

流程图&#xff0c;作为一种直观展示工作过程和系统运作的工具&#xff0c;在现代办公和项目管理中发挥着不可或缺的作用。 其优势在于能够清晰、直观地呈现复杂的过程和关系&#xff0c;帮助人们快速理解并掌握关键信息。同时&#xff0c;流程图也广泛应用于各种场景&#xf…

C++ static_cast学习

static_cast可实现&#xff0c; 1 基本类型之间的转换 2 void指针转换为任意基本类型的指针 3 用于有继承关系的子类与父类之间的指针或引用的转换 用于基本类型转化时&#xff0c;会损失精度类似于C语言的强制转化&#xff1b; 下面先看一下void指针的转换&#xff1b; …

cpu卡片详解(FM1208)

​ 目录 ​1. 引言 1.1 FM1208 CPU卡芯片 2. FM1208 CPU卡芯片概述 2.1 FM1208及其在智能卡中的作用 2.2 FM1208功能框图 3.FM1208的技术规格 4.FM1208工作流程 5.&#xff26;&#xff2d;1208文件结构 6.FM1208与其他智能卡技术的比较 7.FM1208安全特性 7.1 DES/…

哈希表法快速求解最长连续序列 | 力扣128题详细解析

❤️❤️❤️ 欢迎来到我的博客。希望您能在这里找到既有价值又有趣的内容&#xff0c;和我一起探索、学习和成长。欢迎评论区畅所欲言、享受知识的乐趣&#xff01; 推荐&#xff1a;数据分析螺丝钉的首页 格物致知 终身学习 期待您的关注 导航&#xff1a; LeetCode解锁100…

美团小程序mtgsig1.2逆向

声明 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01;wx a15018601872 本文章未…

HarmonyOS ArkTS 实现类似Android中RadioButton得效果

在Android中如实现下图可以用radioGroup和RadioButton实现&#xff0c;但在ArkTs中radio不能实现自定义样式&#xff0c;所以用Tabs来实现这种效果&#xff0c;效果图如下&#xff1a; 一、效果图 二、实现横向布局的三个TabContent&#xff0c;代码如下 State currentIndex: n…

互联网轻量级框架整合之控制反转和注入

依赖注入和依赖查找 应该说IoC的工作方式有两种&#xff0c;一种是依赖查找&#xff0c;通过资源定位&#xff0c;把对应的资源查找出来&#xff0c;例如通过JNDI找到数据源&#xff0c;依赖查找被广泛使用在第三方的资源注入上&#xff0c;比如在Web项目中&#xff0c;数据源往…

小程序|锁定查询功能如何使用?

学生或家长想要实现自己查询完成后&#xff0c;任何人都无法再次查询&#xff0c;老师应该如何设置&#xff1f;易查分的【锁定查询功能】就可实现&#xff0c;下面教大家如何使用吧。 &#x1f4cc;使用教程 &#x1f512;锁定查询功能介绍 ✅学生或家长自主锁定&#xff1a;开…

酷开科技丨女性群像大戏《惜花芷》在酷开系统热播中

在这个国产剧市场蓬勃发展的时代&#xff0c;酷开科技通过其生态智能电视系统&#xff0c;为剧迷们打造了一个精彩的观剧平台。通过酷开科技的智能推荐算法&#xff0c;消费者能够轻松地发掘并观看各种题材的高质量剧集&#xff0c;无论是扣人心弦的金融较量、深刻的家庭代际关…

QCustomPlot的了解

&#xff08;一&#xff09;QCustomPlot常见属性设置、多曲线绘制、动态曲线绘制、生成游标、矩形放大等功能实现-CSDN博客 关键代码&#xff1a; QT core gui printsupport 使用上面文章中的代码跑起来的程序效果图&#xff1a; 我的学习过程&#xff1a; 最开始初…

位图和布隆过滤器:位图

在《unordered_map 和 unordered_set》 中提到过&#xff1a; 哈希是一种思想&#xff0c;通过哈希函数将数据转化为一个或多个整型 —— 映射关系&#xff1b;通过这种映射关系&#xff0c;可以做到以 O(1) 的时间复杂度查找数据。 本文即将介绍的 位图 和 布隆过滤器 就是两个…

【漏洞复现】泛微OA E-Cology GetLabelByModule SQL注入漏洞

漏洞描述&#xff1a; 泛微OA E-Cology是一款面向中大型组织的数字化办公产品&#xff0c;它基于全新的设计理念和管理思想&#xff0c;旨在为中大型组织创建一个全新的高效协同办公环境。泛微OA E-Cology getLabelByModule存在SQL注入漏洞&#xff0c;允许攻击者非法访问和操…

ubuntu下安装pwndbg

安装pwndbg 如果可以科学上网 首先安装git apt install git 然后拉取git库 git clone GitHub - pwndbg/pwndbg: Exploit Development and Reverse Engineering with GDB Made Easy 进入到pwngdb的文件夹中 cd pwngdb 执行 ./setup.sh 而后输入gdb 出现红色pwndgb就是安装成功…

图形程序复用新纪元 探讨云库安全分享计划

在公司的开放式办公室中&#xff0c;卧龙与凤雏相邻而坐。周围的同事们都在忙碌地工作&#xff0c;键盘敲击声不绝于耳。卧龙眉头紧锁&#xff0c;全神贯注地调试着复杂的代码&#xff0c;仿佛在挑战编程世界的极限。而凤雏则在完成了一段代码编写后&#xff0c;轻松地伸展着身…

EtherCat:打通EtherCat奇经八脉(一)

一、EtherCat背景介绍 EtherCAT是一种用于实时以太网通信的现场总线协议。它由德国Beckhoff公司于2003年开发&#xff0c;并在2014年成为国际电机工程师协会&#xff08;IEC&#xff09;的国际标准&#xff08;IEC61158-12&#xff09;。 EtherCAT的设计目标是实现高性能的实时…

【独家发布】公司搭建绩效考核体系的方案(一)

某车辆公司成立于上世纪七十年代&#xff0c;其悠久历史可以追溯到洋务运动时期&#xff0c;曾开创了中国近代工业的先河。该公司拥有近五十年的车辆生产经验及积累&#xff0c;全球共有13个生产基地&#xff0c;22个整车发动机工厂和3个独立变速器工厂&#xff0c;1个技术中心…

JavaScript 进阶(二)

一、深入对象 1. 创建对象的三种方式 利用 new Object 创建对象 2. 构造函数 【注意事项】 【例】 这样子写好之后&#xff0c;想要添加一个新的结构类似的对象&#xff0c;直接照着红圈中写&#xff0c;最后改相应的数据就好了 注意&#xff1a;红色是第一步&#xff0c;黄…

大模型MoE技术深度解读,引领AI走向新高度

大模型系列之解读MoE Mixtral 8x7B的亮相&#xff0c;引领我们深入探索MoE大模型架构的奥秘。MoE究竟是什么&#xff1f;一起揭开它的神秘面纱。 1. MoE溯源 MoE&#xff0c;源自1991年的研究论文《Adaptive Mixture of Local Experts》&#xff0c;与集成学习方法相契合&…

水泡传感器内部结构

水泡传感器内部结构&#xff1a; 水泡传感器放大电路 电路是基于1.6V做的TIA I2V&#xff0c; 也就是输出部分基于1.6V做电压的增加或减少。

五分钟带大家理解什么是网络代理

网络代理是指一种特殊的网络服务&#xff0c;允许一个网络终端&#xff08;一般为客户端&#xff09;通过这个服务与另一个网络终端&#xff08;一般为服务器&#xff09;进行非直接的连接&#xff0c;一些网关、路由器等网络设备都具备网络代理功能。它的功能就是代理网络用户…