暴力法是遞迴生成所有組合方式,同時判斷是否符合要求
回溯法,不需要在生成完整的組合之後再判斷,因為在每乙個位置最多有兩種擺放方法:當前還有左括號剩餘時,放置左括號;當前組合中已經放置的左括號的個數大於右括號個數時,放置右括號
然後回退一步,逆操作狀態值(此處狀態值為臨時儲存空間),檢視接下來剩餘哪種情況
class
solution
:def
generateparenthesis
(self, n:
int)
-> list[
str]
: result =
if n<=0:
return result
defback
(temp, left, right)
:# 滿足組合長度的條件,不需要判斷是因為組合生成的方式保證了合理性
iflen
(temp)==2
*n:''
.join(temp)
)return
# 還有左括號剩餘
if left'(')
back(temp, left+
1, right)
# 逆操作狀態值
temp.pop(
)# 已使用的左括號的個數大於右括號,說明此時放入右括號一定有左括號與其匹配
if left>right:
')')
back(temp, left, right+1)
temp.pop(
) back(
,0,0
)return result
leetcode 括號生成
給出 n 代表生成括號的對數,請你寫出乙個函式,使其能夠生成所有可能的並且有效的括號組合。例如,給出 n 3,生成結果為 回溯法 遞迴每次填入的要麼是 要麼是 當然,第乙個肯定是 並且 的數目不會超過 記錄左括號和右括號的數量,當分別達到n時即為合格的狀態,可以壓入vector,當然為了去重最好先用...
leetcode 括號生成 1
題目鏈結 給出 n 代表生成括號的對數,請你寫出乙個函式,使其能夠生成所有可能的並且有效的括號組合。例如,給出 n 3,生成結果為 我的方法,dfs,然後再n 1層上 的前面和後面分別新增括號 另外,這個總數是第n個卡塔蘭數 dfrac binomn 11 n2n class solution el...
leetcode 括號生成(python)
題目 給出 n 代表生成括號的對數,請你寫出乙個函式,使其能夠生成所有可能的並且有效的括號組合。例如,給出 n 3,生成結果為 思路 回溯法 class solution def generateparenthesis self,n int list str def generate item,le...