leetcode演算法題22 括號生成

2021-10-09 08:39:23 字數 1391 閱讀 6715

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

輸入:n = 3

輸出:[

「((()))」,

「(()())」,

「(())()」,

「()(())」,

「()()()」

]

方法一:可以把所有情況都列出來,然後判斷是否符合要求,並使用乙個變數 balance 表示左括號的數量減去右括號的數量。如果在遍歷過程中 balance 的值小於零,或者結束時 balance 的值不為零,那麼該序列就是無效的,否則它是有效的。

class

solution

return balance==0;

}void

digui

(string& str,vector

& res,

int n)

str=str+

'(';

digui

(str,res,n)

; str.

pop_back()

; str=str+

')';

digui

(str,res,n)

; str.

pop_back()

;}public

: vector

generateparenthesis

(int n)

};

方法二:在方法一的基礎上,不用判斷所有的情況,如果左括號數量不大於 n,我們可以放乙個左括號。如果右括號數量小於左括號的數量,我們可以放乙個右括號。當左括號數目小於右括號數目時,就不再遞迴判斷了。

class

solution

if(leftif(right}public

: vector

generateparenthesis

(int n)

};

記錄別人寫的**,思路很清晰

class

solution

getparenthesis(""

,n,n)

;return res;

}private

void

getparenthesis

(string str,

int left,

int right)

if(left == right)

else

if(left < right)

getparenthesis

(str+

")",left,right-1)

;}}}

Leetcode演算法題22 括號生成

廣度優先 佇列實現 自定義結點類 反思與總結 class solution if left n 當右括號的個數少於左括號的個數時,括號不閉合,可以新增右括號 if right left public list generateparenthesis int n class node public n...

Leetcode22題括號匹配

題目 給出 n 代表生成括號的對數,請你寫出乙個函式,使其能夠生成所有可能的並且有效的括號組合。例如,給出n 3 生成如下 題解 本題利用回溯法中的分支限界法進行求解。進入左子樹的條件是左括號剩餘數量大於0,進入右子樹的條件是右括號剩餘數量大於0,並且左括號剩餘數量小於右括號剩餘數量。class s...

leetcode22題題解 括號生成

題目 數字 n 代表生成括號的對數,請你設計乙個函式,用於能夠生成所有可能的並且 有效的 括號組合。有效的括號組合就是指 1.插入數量不超過n 2.可以插入 的前提是 的數量大於 我們可以把整個過程理解為乙個二叉樹,左子樹為增加左括號,右子樹為增加右括號 當左括號數量小於右括號時,那就這能增加左括號...