leetcode 生成括號(回溯演算法)

2022-09-15 23:33:20 字數 1008 閱讀 8728

**出處:

生成括號

給出 n 代表生成括號的對數,請你寫出乙個函式,使其能夠生成所有可能的並且有效的括號組合。

例如,給出 n =3,生成結果為:

[

"((()))",

"(()())",

"(())()",

"()(())",

"()()()"

]

從題目尋找三要素:

1 選擇:

加左括號

加右括號

2 條件

左括號沒有用完(才可以加左括號)

右括號數目小於左括號數目(才可以加右括號)

3 結束

左右括號均用完

思路:

if

(左右括號都已用完)

//否則開始試各種選擇

if(還有左括號可以用)

if(右括號小於左括號)

**如下:

class

solution

void backtrace(int left,int right,string out,listlist)

if(left>0)

if(right>left)}}

總結:在做第二遍的時候發現,如何解決這個分支的問題,根據判定條件,你需要新增左括號和右括號。發現,回溯的演算法是計算到他的邊界位置,這裡用兩個if()的條件,可以順利的分支為新增左括號和右括號。下面是通過debug展示的回溯演算法在計算過程中的真實操作。 在進行  generateparenthesis(int n) 方法時,其實生成了許多條執行緒來向下探索。

通過這裡,其實體現了遞迴和回溯的類似。兩者在分支的情況下,都是生成了2個執行緒,不斷遞迴,就是不斷生成新的執行緒。

leetcode 22 括號生成 回溯

對待這種問題,千萬別暴力搜尋,那樣太笨了。方法一 執行用時 20 ms,在generate parentheses的c 提交中擊敗了67.40 的使用者 記憶體消耗 18.9 mb,在generate parentheses的c 提交中擊敗了14.83 的使用者 第乙個想到的是回溯法。每一次判別就o...

LeetCode 中等 回溯 22 括號生成

數字 n 代表生成括號的對數,請你設計乙個函式,用於能夠生成所有可能的並且 有效的 括號組合。示例 輸入 n 3 輸出 class solution public void generateall char current,int pos,list result else 判斷是否是符合題目要求的有...

回溯演算法 括號生成

22.括號生成 思路 先用回溯演算法生成所有可能的括號,再判斷生成的括號是否為有效括號。對於有效括號的判斷,leetcode也有一道專門的題,用棧輔助就可以很簡單的解決。整體 也沒啥,就是回溯 有效括號的判斷 class solution def generateparenthesis self,n...