22 括號生成

2021-09-18 01:44:38 字數 1359 閱讀 3587

參考回溯法

1.

class

solution

:def

__init__

(self)

: self.ans_list =

defgenerateparenthesis

(self, n:

int)

: self.parenthesisiter(n,0,

'')return self.ans_list

defparenthesisiter

(self, l :

int, r:

int, ans:

str)

->

str:

# l : 剩餘可用左括號數

# r : 剩餘可用右括號數

# ans : 臨時儲存之前遞迴產生的括號字串

#僅剩可用右括號,全部增加之答案並儲存

if l ==0:

')'* r)

return

#由於此處l必然》0 因此可以減少剩餘可用左括號數,增加剩餘可用右括號數 -> 即畫乙個左括號

self.parenthesisiter(l -

1, r +

1,ans +

'(')

#當剩餘右括號可用數》0時,可以僅減少剩餘右括號可用數 -> 即畫乙個右括號

if r >0:

self.parenthesisiter(l, r -

1,ans +

')')

return

class

solution

:def

generateparenthesis

(self, n:

int)

-> list[

str]

:def

generate

(res,ans,count1,count2,n):if

(count1>n or count2>n)

:return

if(count1==n and count2==n)

:#count1統計「(」的個數,count2統計「)」的個數

if(count1>=count2)

: generate(res,ans+

"(",count1+

1,count2,n)

generate(res,ans+

")",count1,count2+

1,n)

res=

generate(res,"",

0,0,n)

return res

22 括號生成

給出 n 代表生成括號的對數,請你寫出乙個函式,使其能夠生成所有可能的並且有效的括號組合。例如,給出 n 3,生成結果為 在leetcode中有關括號的題共有三道,除了這一道的另外兩道是valid parentheses 驗證括號和longest valid parentheses 最長有效括號,這...

22 括號生成

插空法對於乙個 可以把另乙個 插到它的任意乙個空位,形成新的組合。此處有3個空位,但插在頭部和尾部是重複的,所以要注意去重,可以用set class solution object def generateparenthesis self,n res set for i in range n 1 t...

22 括號生成

給出 n 代表生成括號的對數,請你寫出乙個函式,使其能夠生成所有可能的並且有效的括號組合。例如,給出 n 3,生成結果為 核心思想是 組合演算法的應用。首先介紹組合演算法。從m個元素取n個元素,不考慮取出順序。一種 實現 基於深度遍歷,此方法為倒序遍歷 參考部落格 void dfs int n,in...