【python】求n对括号总共可以生成多少组合理的括号对

求n对括号总共可以生成多少组合理的括号对

例如3对(),总共可以生成5组括号对:['((()))', '(()())', '(())()', '()(())', '()()()']

题目分析:

有效的括号需要满足条件:

括号数量匹配 && 不会出现不匹配的括号情况

1、起始有 n 个左括号和 n 个右括号需要拼接到字符串中。

2、先将结果字符串初始化为空。

3、每次递归时,选择其中一种括号,拼接到结果字符串的最右边。分为两种情况:

(1)如果剩余左括号和右括号的数量相等,那么下一步只能放左括号

(2)如果剩余右括号多于左括号,那么既可以放左括号,又可以放右括号

不可能出现左括号多于右括号的情况。

4、直至没有剩余括号为止。

比如:需要放两对括号,则

1、首先,只能放左括号,结果为'('

2、现在剩下 1 个左括号和 2 个右括号,因此两个都可以放,结果为 '()' 和 '(('

3、现在结果集有两种情况了,

(1)对于 '()',还剩下各1种括号,因此只能放左括号,得到 '()('

(2)对于 '((',还剩下2个右括号,因此既可以放左又可以放右,但是左括号剩余0个,因此只能放右括号,得到 '(()'

代码如下:

#coding:utf-8

# 题目描述:
# 给定一个整数n,确定n 对括号()一共可以组合成为几种有效的括号

global result

def find_bracket(left, right, bracket_str):
    """

    """
    global result
    if left == 0 and right == 0:
        result.append(bracket_str)
    if left > right:
        return

    if left > 0:
        find_bracket(left - 1, right, bracket_str + '(')
    if right > 0:
        find_bracket(left, right - 1, bracket_str + ')')

def run(n):
    """

    """
    global result
    result = []
    bracket_str = ""
    find_bracket(n, n, bracket_str)
    print(result)    


if __name__ == "__main__":
    n = 3
    run(n)

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

bible_reader

如果觉得文章有用,欢迎打赏支持

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

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

打赏作者

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

抵扣说明:

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

余额充值