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?
  • ⏱️ 如果限制时间/内存,如何提前剪枝?

❤️ 结语

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

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


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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DeepLink_01

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值