Leetcode演算法 22 生成括號字串

2021-08-29 15:57:16 字數 1515 閱讀 7210

給定整數n,要求輸出 n 對左右括號的所有可能的有效組合。

示例:

輸入:n = 3

輸出:[

"((()))",

"(()())",

"(())()",

"()(())",

"()()()"

]

為了保證括號字串是有效的,需要滿足兩個條件:

可以使用遞迴法,來保證這兩個條件,步驟如下:

1、起始有 n 個左括號和 n 個右括號需要拼接到字串中。

2、先將結果字串初始化為空。

3、每次遞迴時,選擇其中一種括號,拼接到結果字串的最右邊。分為兩種情況:

不可能出現左括號多於右括號的情況。

4、直至沒有剩餘括號為止。

def

generateparenthesis

(n):

""" :type n: int

:rtype: list[str]

遞迴法。

"""deffun_rec

(left_count, right_count)

:'''

將left_count個左括號和right_count右括號進行有效組合

'''if left_count ==

0and right_count ==0:

return[''

]if left_count ==0:

return[''

.join(

[')'

]* right_count)

]if right_count ==0:

return[''

.join(

[')'

]* right_count)

]if left_count == right_count:

# 左右數量相等時,只能先放左括號

remain_list = fun_rec(left_count -

1, right_count)

return

['('

+ x for x in remain_list]

else

:# 左括號少於右括號(不可能大於),則左右括號都可以放

remain_list = fun_rec(left_count -

1, right_count)

l1 =

['('

+ x for x in remain_list]

remain_list = fun_rec(left_count, right_count -1)

l2 =

[')'

+ x for x in remain_list]

return l1 + l2

return fun_rec(n, n)

if'__main__'

== __name__:

n =3print

(generateparenthesis(n)

)

LeetCode 22 生成括號

22 生成括號 給出 n 代表生成括號的對數,請你寫出乙個函式,使其能夠生成所有可能的並且有效的括號組合。例如,給出 n 3,生成結果為 生成所有 2 個 和 字元構成的序列。然後,我們將檢查每乙個是否有效。為了檢查序列是否為有效的,我們會跟蹤平衡,也就是左括號的數量減去右括號的數量的淨值。如果這個...

22 生成括號

n n組括號,括號字串長度為2n2n 字串中的每個字元有兩種選擇可能,或 故有22n 2 22 n種可能。分析 1 我們定義兩個變數left和right分別表示剩餘左右括號的個數,如果在某次遞迴時,左括號的個數大於右括號的個數,說明此時生成的字串中右括號的個數大於左括號的個數,即會出現 或者 這樣的...

leetcode 22 生成合法的括號組合

給定n對括號,計算出n對括號的所有合法組合 實現起來非常複雜 將每一種括號的組合放在6個字元大小的陣列中,共會產生22n個組合,時間複雜度位2 2n 如何判斷非法括號組合 從左往後掃瞄,當左括號出現次數少於右括號時即非法,如 還是遞迴,但使用剪枝法來排除產生非法的括號組合 左括號可以隨便新增,最多到...