leetcode 22 括號生成

2021-09-08 09:32:42 字數 931 閱讀 1982

給出 n 代表生成括號的對數,請你寫出乙個函式,使其能夠生成所有可能的並且有效的括號組合。

例如,給出 n = 3,生成結果為:

[

"((()))",

"(()())",

"(())()",

"()(())",

"()()()"

]

參考官方題解:

方法二:回溯法

只有在序列仍然保持有效才會新增「(」,")"。

如果還有位置,我們可以開始放乙個左括號。如果不超過右括號數量不超過左括號的數量可以放乙個右括號。

class

solution

:def

generateparenthesis

(self, n)

:"""

:type n: int

:rtype: list[str]

"""res =

defback

(s=''

,left =

0,right =0)

:'''

s:表示括號字串

left:字串中"("的個數

right:字串中")"的個數

'''iflen

(s)==

2*n:

#字串個數為2*n,停止新增括號字元,字串加入結果中

return

if left < n:

#"("的個數小於n,就可以新增左括號

back(s+

'(',left+

1,right)

if right#右括號的個數小於左括號的個數,就可以新增右括號

back(s+

')',left,right+1)

back(

)return res

LeetCode22 括號生成

題幹 給出 n 代表生成括號的對數,請你寫出乙個函式,使其能夠生成所有可能的並且有效的括號組合。例如,給出 n 3,生成結果為 演算法思想 先看括號匹配,既然要達到括號匹配,就一定要滿足stack的操作 不多說 則組合數的結果則是卡特蘭數。要輸出正確組合數,可採用遞迴,用兩個變數l,r分別表示剩餘左...

leetcode 22 括號生成

給出 n 代表生成括號的對數,請你寫出乙個函式,使其能夠生成所有可能的並且有效的括號組合。例如,給出 n 3,生成結果為 要把這個當成下棋,左括號為黑,右括號為白,則轉換為 3黑3白有幾種排列方式 每一步都有兩個選擇 下黑或者下白,但是場上下白子時剩下的黑子必須比剩下的白子多 比n 2時,有黑白黑白...

LeetCode22 括號生成

給出 n 代表生成括號的對數,請你寫出乙個函式,使其能夠生成所有可能的並且有效的括號組合。例如,給出 n 3,生成結果為 解題思路 每個位置有兩種決策,一樣的跟全排列的思想,搞兩個機械人,乙個機械人放左括號,另外乙個放右括號,而遞迴部分 任然是重點,考慮到放左右括號的條件,然後,考慮要不要把大答案也...