当前位置: 首页 > news >正文

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)
            return
        if 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.dtcms.com/a/99297.html

相关文章:

  • 【15】Selenium 爬取实战
  • stringstream的使用
  • d2025329
  • PyGame开发贪吃蛇小游戏
  • Hive SQL中 ?+.+ 的用法,字段剔除
  • 在Qt中判断输入的js脚本是否只包含函数
  • 【Linux】常见信号 + 进程和作业
  • Java常用异步方式总结
  • 硬实时操作系统(Hard Real-Time OS)与软实时操作系统(Soft Real-Time OS)的区别
  • matplot显示中文
  • json-server使用方法
  • Android14 SystemUI中添加第三方AIDL
  • java.util包之java.util.Collection介绍
  • 并发编程之最小化共享
  • 21_js正则_表单验证
  • Java基于SpringBoot的网络云端日记本系统,附源码+文档说明
  • 若依——基于AI+若依框架的实战项目(实战篇(上))
  • SourceMap原理
  • 打破循环依赖的三大法宝:Spring Boot实战解析
  • 基于三维数字图像相关(DIC)全场应变测量技术的基础设施结构健康监测与安全评估方法研究
  • Msys2安装编译Redis
  • LearnOpenGL-笔记-其六
  • 数据分析概述
  • tauri配置全局变量
  • neo4j中导入csv格式的三元组数据
  • 访问者模式_行为型_GOF23
  • 人工智能入门(2)
  • 心理咨询法律咨询预约咨询微信小程序系统源码独立部署
  • Python函数中的*args与**kwargs详解:灵活处理可变参数
  • LabVIEW 燃气轮机气路故障诊断