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

 

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