LeetCode 22 括號生成

2022-06-17 23:03:11 字數 1202 閱讀 3694

又到了休息大腦時間,抽空刷一題,然而每次做了都好像不是在休息大腦,是在勒緊.......

題目:

數字 n 代表生成括號的對數,請你設計乙個函式,用於能夠生成所有可能的並且有效的括號組合。

示例:

輸入:n = 3

輸出:[

"((()))",

"(()())",

"(())()",

"()(())",

"()()()"

]

思路:掙扎半天寫不出來關係式的確認關係,只好去題解取經,q_q 摘自題解大大的乙個圖。

很明顯這個題目需要用到遞迴回溯,判斷回溯很簡單,拿到乙個問題,你感覺如果不窮舉一下就沒法知道答案,那就可以開始回溯了。

一般回溯的問題有三種:

find a path to success 有沒有解

find all paths to success 求所有解

find the best path to success 求最優解

方法一:

左括號'('出現的次數取決於n,右括號')'出現取決於左括號出現的數量要大於右括號。

class solution(object):

def generateparenthesis(self, n):

""":type n: int

:rtype: list[str]

"""res=

self.dfs(res,n,n,'')

return res

def dfs(self,res,left,right,path):

if left ==0 and right==0:

if left >0:

self.dfs(res,left-1,right,path+'(')

if left執行用時:24 ms, 在所有 python 提交中擊敗了54.54%的使用者

記憶體消耗:12.9 mb, 在所有 python 提交中擊敗了11.11%的使用者

LeetCode22 括號生成

題幹 給出 n 代表生成括號的對數,請你寫出乙個函式,使其能夠生成所有可能的並且有效的括號組合。例如,給出 n 3,生成結果為 演算法思想 先看括號匹配,既然要達到括號匹配,就一定要滿足stack的操作 不多說 則組合數的結果則是卡特蘭數。要輸出正確組合數,可採用遞迴,用兩個變數l,r分別表示剩餘左...

leetcode 22 括號生成

給出 n 代表生成括號的對數,請你寫出乙個函式,使其能夠生成所有可能的並且有效的括號組合。例如,給出 n 3,生成結果為 要把這個當成下棋,左括號為黑,右括號為白,則轉換為 3黑3白有幾種排列方式 每一步都有兩個選擇 下黑或者下白,但是場上下白子時剩下的黑子必須比剩下的白子多 比n 2時,有黑白黑白...

leetcode 22 括號生成

給出 n 代表生成括號的對數,請你寫出乙個函式,使其能夠生成所有可能的並且有效的括號組合。例如,給出 n 3,生成結果為 參考官方題解 方法二 回溯法 只有在序列仍然保持有效才會新增 如果還有位置,我們可以開始放乙個左括號。如果不超過右括號數量不超過左括號的數量可以放乙個右括號。class solu...