Python小练习系列 Vol.3:生成有效括号组合(回溯 + DFS)

🧠 Python小练习系列 Vol.3:生成有效括号组合(回溯 + DFS)

👋 本期我们来刷一道 LeetCode 热门经典题,借此掌握回溯算法的精髓 —— 生成有效括号组合,是学习递归 & DFS 的黄金题型!


🧩 一、题目描述

给定一个整数 n,代表括号对的数量,请你生成所有格式正确的括号组合。

示例:

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

🧠 二、解题思路

我们可以用「回溯 + 深度优先搜索(DFS)」的方法,逐步构建每一位括号组合。

合法组合规则:

  • 左括号 ( 的数量不能超过 n
  • 右括号 ) 的数量不能超过左括号数量

回溯核心:

  • 用递归函数 dfs(path, left, right)
  • 当 path 满足长度条件时,将其加入结果
  • 尝试添加 (),并继续向下探索

👨‍💻 三、Python代码实现

def generate_parentheses(n):result = []def dfs(path, left, right):if len(path) == 2 * n:result.append(path)returnif left < n:dfs(path + '(', left + 1, right)if right < left:dfs(path + ')', left, right + 1)dfs('', 0, 0)return result

📌 四、运行示例

print(generate_parentheses(3))
# 输出:['((()))', '(()())', '(())()', '()(())', '()()()']

🧩 五、解题思维小结

步骤说明
定义参数当前构造字符串 path、左括号数 left、右括号数 right
剪枝策略左右括号数量必须符合规则
终止条件path 长度等于 2 * n 即为完整解

✅ 本题关键在于:控制递归分支合法性,避免冗余搜索


💡 六、进阶思考

  • 💬 输出的括号组合可以按字典序排列吗?
  • 🧠 用栈模拟生成过程,可视化 DFS?
  • ⏱️ 如果限制时间/内存,如何提前剪枝?

❤️ 结语

回溯法很像在“决策树”中找答案,本题正是练习递归与剪枝的完美例子!

📌 下一期预告:迷宫寻路:回溯走迷宫(二维矩阵)


👉 点赞 👍 + 收藏 🌟,练好算法,刷题不慌!

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

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

相关文章

实战经验深度解析 | 博睿数据制造行业精选案例集发布!

近年来&#xff0c;我国制造业加速迈向高端化、智能化、绿色化&#xff0c;为经济高质量发展注入新动能。放眼全球&#xff0c;制造业正加速数字化、智能化转型&#xff0c;5G、人工智能、边缘计算等技术与生产全流程深度融合&#xff0c;有力推动柔性化生产与产业链协同创新发…

[创业之路-344]:战略的本质是选择、聚焦, 是成本/效率/低毛利优先,还是差易化/效益/高毛利优先?无论是成本优先,还是差易化战略,产品聚焦是前提。

前言&#xff1a; 一、战略的本质是选择、聚焦 关于战略的本质&#xff0c;触及了商业竞争的核心矛盾&#xff1a;选择成本优先&#xff08;效率/低毛利&#xff09;还是差异化&#xff08;效益/高毛利&#xff09;&#xff0c;本质上是对企业战略方向的终极拷问。 1、战略选…

项目代码第10讲【数据库运维知识——如何优化数据库查询效率?】:各种日志查看;主从复制;分库分表(MyCat);读写分离;区别数据分区、分表、分库

01. 运维-课程介绍_哔哩哔哩_bilibili 一、各种日志查看 二、主从复制 三、分库分表&#xff08;MyCat&#xff09; 四、读写分离 五、区别数据分区、分表、分库 1、数据库分区 上图中的ibd文件&#xff0c;是分区表的数据文件&#xff0c;可以分布在不同的物理设备上&…

OpenCV图像拼接(10)用于实现图像拼接过程中的时间流逝(timelapse)效果的一个类cv::detail::Timelapser

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 cv::detail::Timelapser 是 OpenCV 库中用于实现图像拼接过程中的时间流逝&#xff08;timelapse&#xff09;效果的一个类。它通常用于将一系列…

Transformer 通关秘籍2:利用 BERT 将文本 token 化

前面两节分别通过两个代码示例展示了模型将文本转换为 token 之后是什么样的&#xff0c;希望你可以对此有一个感性的认识。 本节来简要介绍一下将一个连续的文本转换为 token 序列的大致过程&#xff0c;这个过程被称为分词&#xff0c;也叫 tokenization。 在你没了解这方面…

Optional的stream方法,flatMap, filter应用

Java 8引入的Optional和Stream彻底改变了我们处理空值和集合操作的方式。本文将深入探讨如何将二者结合使用&#xff0c;通过四个核心场景提升代码的健壮性和简洁性。 一、Optional构成的Stream&#xff1a;空值自动过滤 当处理Optional集合时&#xff0c;我们常需要过滤掉空…

参加李继刚线下活动启发:未来提示词还会存在吗?

上周六&#xff0c;我参加了李继刚老师组织的线下活动。 现场干货满满&#xff0c;尤其是关于 AI 时代提示词的价值、与 AI 沟通的艺术等话题&#xff0c;李老师的分享如同醍醐灌顶&#xff0c;让我对 AI 人机协作有了更深的理解。 将几点核心收获整理出来&#xff0c;与大家…

Python基础知识第二天:从格式化到流程控制

Python基础知识第二天&#xff1a;从格式化到流程控制 大家好&#xff01;今天我们来梳理Python的一些重要基础知识&#xff0c;包括格式化输出、输入函数、运算符以及流程控制语句。 1. 格式化输出 Python提供了多种格式化输出的方式&#xff1a; # %d, %f, %s 格式化name &q…

GDB: coredump

前言&#xff1a;一句话如下使用 gdb [exec_file] [core_file] # or gdb -c [core_file] [exec_file] #-c指定转储的core文件 gdb -c core.5213 spp_uc_frequent_contact_ol_worker # 进入后输入bt查看调用栈 bt #显示所有帧栈 bt 10 #显示前面10个帧栈(感觉没啥用) bt …

21_js正则_表单验证

目录 正则 一、 正则的概念 二、创建正则方式 2.1 构造函数去创建正则 2.2 字面量去创建正则 2,3 test方法 三、正则修饰符 四、 正则的方法 lastIndex test方法 exec 五、字符串方法 replace match search split 六、正则表达式的构成 元字符-- 定位符 元字…

矿山自动化监测解决方案

1.行业现状 为贯彻落实《中共中央国务院关于推进安全生产领域改革发展的意见》《“十四五”矿山安全生产规划》&#xff08;应急〔2022〕64号&#xff09;、《国务院安委会办公室关于加强矿山安全生产工作的紧急通知》&#xff08;安委办〔2021〕3号&#xff09;等有关工作部署…

企业级知识库建设:自建与开源产品集成的全景解析 —— 产品经理、CTO 与 CDO 的深度对话

文章目录 一、引言二、主流产品与方案对比表三、自建方案 vs. 开源产品集成&#xff1a;技术路径对比3.1 自建方案3.2 开源产品集成方案 四、结论与个人观点 一、引言 在当今数据驱动的商业环境中&#xff0c;构建高质量的知识库已成为企业数字化转型的关键一环。本博客分别从…

【蓝桥杯】单片机设计与开发,温度传感器DS18B20

一、温度传感器概述 结构图 二、通信过程 三、onewire单总线协议概述 四、单总线的工作原理 黑粗线是单片机发送的&#xff0c;浅的是s18b20回应的 五、温度传感器的应用 六、onewire 七、课后习题

Python 在Word中查找并替换文本

在操作Word文档时&#xff0c;如果想要修正一处反复出现的拼写错误&#xff0c;统一文中前后不一致的术语&#xff0c;或者将文档中所有的旧联系方式更新为新号码。这时我们可以使用 Word中的查找替换功能&#xff0c;快速定位并批量处理文档中的特定文本&#xff0c;提升编辑效…

Python 笔记 (二)

Python Note 2 1. Python 慢的原因2. 三个元素3. 标准数据类型4. 字符串5. 比较大小: 富比较方法 rich comparison6. 数据容器 (支持*混装* )一、允许重复类 (list、tuple、str)二、不允许重复类 (set、dict)1、集合(set)2、字典(dict)3、特殊: 双端队列 deque 三、数据容器的共…

kill子进程后再wait可以吗?

在父进程中先使用 kill 函数终止子进程&#xff0c;之后再使用 wait 函数是可行的&#xff0c;下面从原理、使用示例、注意事项几个方面详细说明。 原理 kill 函数&#xff1a;其作用是向指定进程发送信号。当向子进程发送 SIGTERM&#xff08;通常用于请求进程正常终止&…

ai-api-union项目,适配各AI厂商api

项目地址&#xff1a;alpbeta/ai-api-union 需求&#xff1a;实现兼容各大模型厂商api的流式对话和同步对话接口&#xff0c;本项目现兼容智谱、豆包、通义、通义版deepseek 设计 一个ChatController类对外暴露这两个接口&#xff0c;入参都为ChatRequest请求类&#xff0c;…

【QT】QT样式设计

QT样式设计 一、QT工程中添加资源文件1.资源文件&#xff1a;2. 添加步骤&#xff1a;3. 新增资源文件以及删除现有的资源文件4. 使用资源文件 二、QT中的qss语句(样式设计语句)1. 样式设计2.常见的qss语句示例代码&#xff1a; 一、QT工程中添加资源文件 1.资源文件&#xff…

Megatron-LM中的deepseek-v3实现

Megatron-LM&#xff1a;https://github.com/NVIDIA/Megatron-LM/tree/main 使用此仓库构建的著名的库也有很多&#xff0c;如: Colossal-AI, HuggingFace Accelerate, and NVIDIA NeMo Framework.Pai-Megatron-Patch工具是阿里人工智能平台PAI算法团队研发,ai-Megatron-Patch…

[mlr3] Bootstrap与交叉验证k-fold cross validation

五折交叉验证因其无放回分层抽样和重复验证机制&#xff0c;成为超参数调优的首选&#xff1b; 而Bootstrap因有放回抽样的重复性和验证集的不稳定性&#xff0c;主要服务于参数估计&#xff08;置信区间的计算&#xff09;而非调优。 实际应用中&#xff0c;可结合两者优势&am…