題目
給出 n 代表生成括號(hào)的對(duì)數(shù),請(qǐng)你寫出一個(gè)函數(shù),使其能夠生成所有可能的并且有效的括號(hào)組合。
例如,給出 n = 3,生成結(jié)果為:
[
"((()))",
"(()())",
"(())()",
"()(())",
"()()()"
]
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/generate-parentheses
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系官方授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。
解題思路
本題是要生成所有可能的括號(hào)對(duì),本文要使用遞歸的模式生成:
- 用一個(gè)array存儲(chǔ)所有的字符串
- 終止條件:left和right都為0, 壓入生成的字符串
- left>0,向左遞歸(left-1, right, s+"(")
- left<right并且right>0, 向右遞歸(left, right-1, s+")")
def generateParenthesis(self, n: int) -> List[str]:
def generate(array, left, right, s) -> str:
if left == 0 and right == 0:
array.append(s)
return
if left > 0:
generate(array, left-1, right, s+"(")
if left < right and right > 0:
generate(array, left, right-1, s+")")
array = []
left = n
right = n
generate(array, left, right, "")
return array