參考回溯法
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...