LeetCode Notes 22 括號生成

2022-03-06 10:16:46 字數 1443 閱讀 8894

leetcode

contents方法2:回溯

給出括號對數n之後,就確定了括號組合的字串長度必然是2n,我們可以通過暴力遞迴的方式,在2n個位置上放置'('或者')',得到所有的排列序列,然後逐個判斷每個排列序列是否是正確的,將正確的排列序列加入到結果列表當中。

class

solution

public

void

generateall

(char current, int pos, listresult)

//遞推過程:在current陣列末尾位置新增'('或者')',然後進行遞迴呼叫,在下乙個位置pos + 1繼續新增'('或者')'

//這個過程中並不考慮'('和')'之間的數量以及配對是否是正確的,而是在將整個字串都生成後,才判斷這個字串是否是正確配對的

}else

}//驗證乙個排列序列是否正確

public

boolean

valid

(char current)

else

if(balance < 0)

}return balance == 0;}}

複雜度分析

時間複雜度:

,排列序列一共有

個,對於每個排列序列,呼叫valid()方法進行驗證,其時間複雜度為

。空間複雜度:

,遞迴棧的深度是2n層。

在暴力遞迴法當中,我們其實生成了很多無效的排列序列,但是都要等到最後才能判斷出它們是無效的。更優的方法應該是在構造序列的時候,就進行剪枝,對於已經確認無效的序列,提前將其排除(剪枝)。

回溯法裡邊的回溯,指的就是撤銷選擇這一過程,無論這一次選擇的結果是不是正確的,我們都需要回溯回去,嘗試其他的可能性。

class

solution

// left,right代表左括號,右括號出現的次數

private

void

backtrack

(listans, stringbuilder cur, int left, int right, int n)

//左括號數量if(left < n)

//右括號的數量《左括號的數量,可以繼續新增右括號

if(right < left)}}

複雜度分析

LeetCode Notes 234 回文鍊錶

leetcode contents 方法2 雙指標 反轉鍊錶 請判斷乙個鍊錶是否為回文鍊錶。示例 1 輸入 1 2 輸出 false 示例 2 輸入 1 2 2 1 輸出 true 高階 你能否用 o n 時間複雜度和 o 1 空間複雜度解決此題?class solution int left 0 ...

22 標籤管理

發布乙個版本時,我們通常先在版本庫中打乙個標籤,這樣,就唯一確定了打標籤時刻的版本。將來無論什麼時候,取某個 標籤的版本,就是把那個打標籤的時刻的歷史版本取出來。所以,標籤也是版本庫的乙個快照。git的標籤雖然是版本庫的快照,但其實它就是指向某個commit的指標 跟分支很像對不對?但是分支可以移動...

物件導向2 2

物件導向2 2 一 知識點 1.介面 2.多型 3.內部類 二 介面 1.當乙個抽象類中的方法都是抽象的時候,這時可以將該抽象類用 介面 inte ce來代替。2.介面中的成員修飾符是固定的 只能有這個兩種元素 3.介面的出現將 多繼承 通過另一種形式體現出 來,即 多實現 三 介面的特點 1.介面...