【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)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章