LeetCode 22 括號生成

2021-10-07 04:52:32 字數 940 閱讀 2894

數字 n 代表生成括號的對數,請你設計乙個函式,用於能夠生成所有可能的並且 有效的 括號組合.

輸入:n = 3

輸出:[

「((()))」,

「(()())」,

「(())()」,

「()(())」,

「()()()」

]

這道題和判斷是否是有效的括號字串,都是和括號打交道的。我們可以基於判斷是否是有效括號字串的解法做。

用回溯生成所有組合,依次判斷是否是有效括號字串(總長度為2*n)。判讀的解法我之前做過,用棧或者乙個變數記錄左括號的數目即可。

當然有化簡的暴力法

不用對每乙個組合都去判斷一次。我們只要在遞迴的過程中,確保生成的括號字串是合法的就行。如何確保是合法的呢?

class

solution

:def

generateparenthesis

(self, n:

int)

-> list[

str]

: ans =

defwalk

(i, temp, left, right)

:if i ==

2*n:

''.join(temp)

)return

if left < n:

'(')

walk(i+

1, temp, left+

1, right)

temp.pop(

)if right < left:

')')

walk(i+

1, temp, left, right+1)

temp.pop(

) walk(0,

,0,0

)return ans

LeetCode22 括號生成

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

leetcode 22 括號生成

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

leetcode 22 括號生成

給出 n 代表生成括號的對數,請你寫出乙個函式,使其能夠生成所有可能的並且有效的括號組合。例如,給出 n 3,生成結果為 參考官方題解 方法二 回溯法 只有在序列仍然保持有效才會新增 如果還有位置,我們可以開始放乙個左括號。如果不超過右括號數量不超過左括號的數量可以放乙個右括號。class solu...