給出 n 代表生成括號的對數,請你寫出乙個函式,使其能夠生成所有可能的並且有效的括號組合。
例如,給出 n = 3,生成結果為:思路:36 ms 13.3 mb.參考:回溯演算法-深度優先遍歷[「((()))」,
「(()())」,
「(())()」,
「()(())」,
「()()()」
]
class
solution
:def
generateparenthesis
(self, n:
int)
-> list[
str]
: ans=
defdfs
(left,right,tmp)
:if left==n and right==n:
return
if leftdfs(left+
1,right,tmp+
"(")
if rightdfs(left,right+
1,tmp+
")")
dfs(0,
0,"")
return ans
1.首先基於遞迴的模板考慮如何生成括號,但是不考慮合法性。
class
solution
:def
generateparenthesis
(self, n:
int)
:def
helper
(curlevel, maxlevel, res)
:# terminator
if curlevel >= maxlevel:
# filter
print
(res)
return
# process
res1 = res +
"(" res2 = res +
")"# drill down
helper(curlevel +
1, maxlevel, res1)
helper(curlevel +
1, maxlevel, res2)
# reverse state
helper(0,
2* n,"")
# 自頂向下的程式設計思想:僅僅關注當前層的邏輯
2.考慮限制條件
(1)left < n
;才可以繼續新增left
(2)right < left
;才可以繼續新增right
這樣的話就需要統計左右括號的數量。因為引數curlevel 和maxlevel的作用其實可以通過左右括號的數量和n來替代,所以進行修改。
class
solution
:def
generateparenthesis
(self, n:
int)
:# 內部函式
defhelper
(left, right,maxn, res)
:# terminator
if left==maxn and right== maxn:
print
(res)
return
# process and drill down
if leftres1 = res +
"(" helper(left +
1,right,maxn, res1)
if rightres2 = res +
")" helper(left,right+
1, maxn, res2)
# reverse state
helper(0,
0,n,"")
so = solution(
)so.generateparenthesis(
3)
輸出結果:
(((
)))(
()()
)(()
)()(
)(()
)()(
)()
3.最後修改為題目需要的輸出
使用列表來儲存每個符合要求的答案
class
solution
:def
generateparenthesis
(self, n:
int)
: ans =
defhelper
(left, right,maxn, res)
:if left==maxn and right== maxn:
return
if lefthelper(left +
1,right,maxn, res +
"(")
if righthelper(left,right+
1, maxn, res +
")")
helper(0,
0,n,"")
return ans
22 括號生成
參考回溯法 1.class solution def init self self.ans list defgenerateparenthesis self,n int self.parenthesisiter n,0,return self.ans list defparenthesisiter ...
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...