📜  打印平衡括号的所有组合(1)

📅  最后修改于: 2023-12-03 15:10:01.963000             🧑  作者: Mango

打印平衡括号的所有组合

简介

在编程中,经常需要处理括号匹配的问题。这个问题简单的情况大家应该都能处理,但括号的匹配问题也可以是比较复杂的,比如对于一个包含多种类型括号(小括号、中括号、大括号等)的表达式,如何判断括号是否匹配,以及如何打印出所有的平衡括号的组合呢?

本文将介绍一种使用递归算法来解决这个问题的算法。

算法
算法思路

使用递归算法来完成找出平衡括号组合的问题,具体思路如下:

  1. 定义递归函数,其中参数分别为当前括号组合、左括号数量、右括号数量、总共需要的括号数;
  2. 如果左、右括号数量都已经达到了总共需要的量,说明当前括号组合是一个平衡的括号组合,输出即可;
  3. 如果左括号数量不足总共需要的量,可以添加左括号;
  4. 如果左、右括号数量不等,则可以添加右括号;
  5. 分别调用上述三种情况的情况下的递归函数。
代码实现
def print_all_parentheses(n: int):
    def dfs(cur, left, right, n):
        if left == n and right == n:
            print(cur)
            return
        if left < n:
            dfs(cur + "(", left + 1, right, n)
        if left > right:
            dfs(cur + ")", left, right + 1, n)
    dfs("", 0, 0, n)
使用案例
print_all_parentheses(3)

输出结果:

((()))
(()())
(())()
()(())
()()()
总结

递归算法在处理括号匹配问题时的效率比较高,并且代码的实现也比较简单。这个算法可以直接套用到其他需要找出符合条件方案的问题中。