LeetCode hot 100—括号生成

题目

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

示例

示例 1:

输入:n = 3
输出:["((()))","(()())","(())()","()(())","()()()"]

示例 2:

输入:n = 1
输出:["()"]

分析

为了生成所有可能的并且有效的括号组合,可以使用回溯算法。回溯算法通过递归的方式,尝试所有可能的括号组合,并在生成过程中确保组合的有效性。

回溯法

代码解释

回溯函数 backtrack

open:当前已经使用的左括号的数量。

close:当前已经使用的右括号的数量。

max:括号的对数。

当 current 的长度达到 2 * max 时,说明已经生成了一个完整的括号组合,将其添加到 result 中。

如果 open 小于 max,可以添加一个左括号,并递归调用 backtrack

如果 close 小于 open,可以添加一个右括号,并递归调用 backtrack

时间复杂度:O(\frac{4^{n}}{\sqrt{n}})

空间复杂度:O(n)

class Solution {
private:// 回溯函数,用于生成括号组合void backtrack(std::vector<std::string>& result, std::string current, int open, int close, int max) {// 当当前组合的长度达到 2 * max 时,说明已经生成了一个完整的括号组合if (current.length() == max * 2) {result.push_back(current);return;}// 如果左括号的数量小于 max,则可以添加一个左括号if (open < max) {backtrack(result, current + '(', open + 1, close, max);}// 如果右括号的数量小于左括号的数量,则可以添加一个右括号if (close < open) {backtrack(result, current + ')', open, close + 1, max);}}
public:std::vector<std::string> generateParenthesis(int n) {std::vector<std::string> result;backtrack(result, "", 0, 0, n);return result;}
};  

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

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

相关文章

SpringBoot企业级开发之【文章分类-新增文章分类】

看一下新增文章的需求&#xff1a; 接口文档&#xff1a; 开发思路&#xff1a; 先在controller下去创建add方法&#xff0c;方法内导入Service类获取add的结果&#xff1b;再在Service接口下去创建add的方法&#xff1b;然后在Service实现类下去实现方法的作用&#xff0c;且导…

Minecraft盔甲机制详解(1.9之后)

Minecraft的盔甲有很多种&#xff0c;但是评判盔甲的好坏&#xff0c;通常玩家会使用一个变量来评判——护甲值 护甲值的机制很简单&#xff0c;一格护甲值 &#xff08;半个灰色的衣服图标&#xff09;最多能提供4%的防御 护甲值在不开作弊的生存模式理论上限是20点&#xf…

为什么要给单片机植入操作系统

给单片机植入操作系统&#xff08;通常是实时操作系统&#xff0c;RTOS&#xff09;主要是为了在资源有限的环境中实现更高效、更可靠的多任务管理和系统调度。以下是主要原因和优势&#xff1a; 1. 多任务并行处理 背景&#xff1a;单片机通常需要同时处理多个任务&#xff0…

Arduino+ESP826601s模块连接阿里云并实现温湿度数据上报

ArduinoESP826601s模块连接阿里云并实现温湿度数据上报 一、前言二、准备工作三、程序代码1. Arduino的程序2. ESP826601的程序3. 上面程序需要注意的地方 四、运行结果五、结束语 一、前言 看完我这三篇文章&#xff0c;相信各位朋友对于阿里云物联网平台的使用都有了一定的认…

Java 工厂设计模式详解:用统一入口打造灵活可扩展的登录系统----掌握 Spring 源码的基础第一步

一、前言 在实际开发中&#xff0c;我们经常面临以下场景&#xff1a; 系统支持多种登录方式&#xff08;用户名密码、管理员登录、OAuth 登录、短信登录等&#xff09; 每种登录方式的认证逻辑不同 我们希望对外提供一个统一的接口调用&#xff0c;而不暴露具体实现 这个…

Windows Acrobat Pro DC-v2025.001.20435-x64-CN-Portable便携版

Windows Acrobat Pro 链接&#xff1a;https://pan.xunlei.com/s/VOO1nMjQ1Qf53dyISGne0c_9A1?pwdsfgn# Acrobat Pro 2024 专业增强版特色 ● 创建和编辑 PDF 文件&#xff1a;可以将各种类型的文档转换为 PDF 格式&#xff0c;并进行编辑和修改。 ● 合并和拆分 PDF&#…

【2025“华中杯”大学生数学建模挑战赛】C题:就业状态分析与预测 详细解题思路

目录 2025“华中杯”大学生数学建模挑战赛C题 详细解题思路一、问题一1.1 问题分析1.2 数学模型 1.3 Python代码1.4 Matlab代码 二、问题二2.1 问题分析2.2 数学模型 2.3 Python代码2.4 Matlab代码 三、问题三3.1 问题分析 四、问题四4.1 问题分析与数学模型 2025“华中杯”大学…

识别法院PDF文件特定字段并插入数据库【正则表达式+本地化部署】

pdf解析法院协助单特定字段&#xff0c;开源项目&#xff0c;结合若依项目进行开发&#xff0c;不连互联网&#xff0c;本地开发部署&#xff0c;前端使用vue3技术,后端用若依分离版spring botot技术&#xff0c;实现将pdf法院协助执行通知书中的特定字段如&#xff1a;时间、文…

拥抱健康养生,开启活力生活

在快节奏的现代生活中&#xff0c;人们愈发重视健康养生。它并非高深莫测的学问&#xff0c;而是融合于日常点滴&#xff0c;对我们的生活有着深远影响。 合理饮食是健康养生的基石。一日三餐&#xff0c;应遵循营养均衡原则。多摄入蔬菜、水果&#xff0c;它们富含维生素与膳食…

无人机姿态稳定与动态控制模块概述!

一、设计难点 1. 动态算力需求与硬件能力的不匹配** 无人机边缘计算设备通常受限于体积和重量&#xff0c;导致其计算单元&#xff08;如CPU、GPU&#xff09;的算力有限&#xff0c;难以应对突发的高负载任务&#xff08;如实时图像处理、AI推理&#xff09;。 挑战&am…

MySQL 临时表介绍

在 MySQL 数据库中&#xff0c;临时表是一种特殊类型的表&#xff0c;它在数据库会话期间存在&#xff0c;会话结束时自动删除。临时表为处理特定的、临时性的数据操作任务提供了一种高效且便捷的方式。 一、临时表的创建 使用CREATE TEMPORARY TABLE语句来创建临时表。其语法…

量子纠缠物理本质、技术实现、应用场景及前沿研究

以下是关于 量子纠缠(Quantum Entanglement) 的深度解析,涵盖物理本质、技术实现、应用场景及前沿研究,以技术视角展开: 一、量子纠缠的物理本质 1. 核心定义 量子纠缠是多个量子系统(如粒子)间的一种关联状态,表现为: 非局域性:纠缠态粒子无论相距多远,测量其中一…

扫雷-C语言版

C语言扫雷游戏设计&#xff08;完整版&#xff09; 游戏背景 扫雷是一款经典的益智类单人电脑游戏&#xff0c;最早出现在1960年代&#xff0c;并在1990年代随着Windows操作系统而广为人知。游戏目标是在不触发任何地雷的情况下&#xff0c;揭开所有非地雷的格子。玩家需要根…

深入理解 Linux 权限管理:从 Shell 到文件权限

&#x1f33c;&#x1f33c; 在 Linux 系统中&#xff0c;权限是保障系统安全与稳定的核心之一。每个操作都可能涉及权限的管理和控制&#xff0c;特别是当你开始以不同用户的身份进行操作时。本文将通过生动的比喻与详细的技术解析&#xff0c;带你一起深入理解 Linux 权限系统…

【Java面试系列】Spring Cloud微服务架构中的分布式事务解决方案与Seata框架实现原理详解 - 3-5年Java开发必备知识

【Java面试系列】Spring Cloud微服务架构中的分布式事务解决方案与Seata框架实现原理详解 - 3-5年Java开发必备知识 引言 在微服务架构中&#xff0c;分布式事务是一个不可避免的挑战。随着业务复杂度的提升&#xff0c;如何保证跨服务的数据一致性成为了面试中的高频问题。本…

【c语言】——深入理解指针2

文章目录 一、指针数组指针数组模拟二维数组 二、数组指针二维数组传参的本质 三、字符指针变量四、函数指针变量4.1. 函数指针的应用4.2 两端有趣的代码4.3. typedef关键字4.3.1 typedef 的使用4.3.2. typedef与#define对比 五、函数指针数组函数指针数组的应用 一、指针数组 …

python20-while和for in的美

课程&#xff1a;B站大学 记录python学习&#xff0c;直到学会基本的爬虫&#xff0c;使用python搭建接口自动化测试就算学会了&#xff0c;在进阶webui自动化&#xff0c;app自动化 分支语句那些事儿 循环的类型循环的作用循环的构成要素while 循环while 循环实战循环语句 for…

私人笔记:动手学大模型应用开发llm-universe项目环境创建

项目代码&#xff1a;datawhalechina/llm-universe: 本项目是一个面向小白开发者的大模型应用开发教程&#xff0c;在线阅读地址&#xff1a;https://datawhalechina.github.io/llm-universe/ 项目书&#xff1a;动手学大模型应用开发 一、初始化项目 uv init llm-universe-te…

剖析 Rust 与 C++:性能、安全及实践对比

1 性能对比&#xff1a;底层控制与运行时开销 1.1 C 的性能优势 C 给予开发者极高的底层控制能力&#xff0c;允许直接操作内存、使用指针进行精细的资源管理。这使得 C 在对性能要求极高的场景下&#xff0c;如游戏引擎开发、实时系统等&#xff0c;能够发挥出极致的性能。以…

详细讲解一下Java中的Enum

Java 中的 枚举&#xff08;Enum&#xff09; 是一种特殊的类&#xff0c;用于表示一组固定且有限的常量&#xff08;如状态、类型、选项等&#xff09;。它提供类型安全的常量定义&#xff0c;比传统的常量&#xff08;如 public static final&#xff09;更强大和灵活。以下是…