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

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.kler.cn/a/614820.html

相关文章:

  • 使用FastExcel时的单个和批量插入的问题
  • 【JavaScript】九、JS基础练习
  • 小红书xhs逆向算法还原(202503月更新)
  • [图论]万字解析图的最短路算法(详细带图解和代码)
  • 六十天前端强化训练之第三十五天之Jest单元测试大师课:从入门到实战
  • 数字内容体验提升用户参与策略
  • 基于dify平台批量分析excel格式信息
  • synchronized锁与lock锁的区别
  • JAVA学习*工厂模式
  • Linux课程学习一
  • 【Kafka】深入探讨 Kafka 如何保证一致性
  • 【区块链安全 | 第八篇】多签机制及恶意多签
  • keil的代码美化工具AStyle3.1
  • 【vue】聊一聊嵌套路由使用keep-alive缓存的实现
  • 面向服务架构(SOA)及ESB的作用与特点
  • 2023第十四届蓝桥杯大赛软件赛国赛C/C++ 大学 B 组(真题题解)(C++/Java题解)
  • 算法-前缀和与差分
  • FGSM对抗样本生成算法实现(pytorch版)
  • AI助力高效办公:如何利用AI制作PPT提升工作效率
  • 结构化分析方法 数据流图详解