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