數字 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.可以插入 的前提是 的數量大於 我們可以把整個過程理解為乙個二叉樹,左子樹為增加左括號,右子樹為增加右括號 當左括號數量小於右括號時,那就這能增加左括號...