n
n組括號,括號字串長度為2n2n
,字串中的每個字元有兩種選擇可能,「(」
或「)」
,故有22n
2^22
n種可能。
分析[1]:我們定義兩個變數left和right
分別表示剩餘左右括號的個數
,如果在某次遞迴時,左括號的個數大於右括號的個數,說明此時生成的字串中右括號的個數大於左括號的個數
,即會出現'())'
或者『)(』
這樣的非法
串,所以這種情況直接返回,不繼續處理。如果left和right都為0
,則說明此時生成的字串已有n個左括號和n個右括號,且字串合法,則存入結果中後返回。如果以上兩種情況都不滿足,若此時left大於0
,則呼叫遞迴函式,注意引數的更新,若right大於0
,則呼叫遞迴函式,同樣要更新引數。
c++ code dfs:
class solution
vector
generateparenthesis
(int n)
};
[1] LeetCode 22 生成括號
22 生成括號 給出 n 代表生成括號的對數,請你寫出乙個函式,使其能夠生成所有可能的並且有效的括號組合。例如,給出 n 3,生成結果為 生成所有 2 個 和 字元構成的序列。然後,我們將檢查每乙個是否有效。為了檢查序列是否為有效的,我們會跟蹤平衡,也就是左括號的數量減去右括號的數量的淨值。如果這個...
Leetcode演算法 22 生成括號字串
給定整數n,要求輸出 n 對左右括號的所有可能的有效組合。示例 輸入 n 3 輸出 為了保證括號字串是有效的,需要滿足兩個條件 可以使用遞迴法,來保證這兩個條件,步驟如下 1 起始有 n 個左括號和 n 個右括號需要拼接到字串中。2 先將結果字串初始化為空。3 每次遞迴時,選擇其中一種括號,拼接到結...
leetcode 22 生成合法的括號組合
給定n對括號,計算出n對括號的所有合法組合 實現起來非常複雜 將每一種括號的組合放在6個字元大小的陣列中,共會產生22n個組合,時間複雜度位2 2n 如何判斷非法括號組合 從左往後掃瞄,當左括號出現次數少於右括號時即非法,如 還是遞迴,但使用剪枝法來排除產生非法的括號組合 左括號可以隨便新增,最多到...