廣度優先(佇列實現 + 自定義結點類)
反思與總結
class
solution
if(left < n)
//當右括號的個數少於左括號的個數時,括號不閉合,可以新增右括號
if(right < left)
}public list
generateparenthesis
(int n)
}
class
node
public
node
(string cur,
int left,
int right)
}class
solution
/* * 先新增左括號,再匹配右括號,且當前括號串內右括號的個數
* 不能多於左括號的個數(如果不滿足這個條件,當前的括號串
* 已經不能匹配成功,例: "(()))")
*/if(curnode.left < n)
if(curnode.right < curnode.left)
}return ans;
}}
class
node
public
node
(string cur,
int left,
int right)
}class
solution
/* * 先新增左括號,再匹配右括號,且當前括號串內右括號的個數
* 不能多於左括號的個數(如果不滿足這個條件,當前的括號串
* 已經不能匹配成功,例: "(()))")
*/if(curnode.left < n)
if(curnode.right < curnode.left)
}return ans;
}}
class
solution}}
dp.add(cur);}
return dp.
get(n);}
}
自己在看到題目的第一眼,就已經知道該題得用深度優先或廣度優先或動態規劃來完成。
當自己決定用深度優先遍歷來完成這道題的時候,寫遞迴演算法的時候,沒能把出棧條件完整地寫出來。
當想自定義結點類的時候,沒有想到可以用結點儲存當前括號串的全部資訊(括號串,左括號數,右括號數),而是想照搬二叉樹那套,導致十分複雜,最後做不出來。
leetcode演算法題22 括號生成
數字 n 代表生成括號的對數,請你設計乙個函式,用於能夠生成所有可能的並且 有效的 括號組合。輸入 n 3 輸出 方法一 可以把所有情況都列出來,然後判斷是否符合要求,並使用乙個變數 balance 表示左括號的數量減去右括號的數量。如果在遍歷過程中 balance 的值小於零,或者結束時 bala...
Leetcode22題括號匹配
題目 給出 n 代表生成括號的對數,請你寫出乙個函式,使其能夠生成所有可能的並且有效的括號組合。例如,給出n 3 生成如下 題解 本題利用回溯法中的分支限界法進行求解。進入左子樹的條件是左括號剩餘數量大於0,進入右子樹的條件是右括號剩餘數量大於0,並且左括號剩餘數量小於右括號剩餘數量。class s...
leetcode22題題解 括號生成
題目 數字 n 代表生成括號的對數,請你設計乙個函式,用於能夠生成所有可能的並且 有效的 括號組合。有效的括號組合就是指 1.插入數量不超過n 2.可以插入 的前提是 的數量大於 我們可以把整個過程理解為乙個二叉樹,左子樹為增加左括號,右子樹為增加右括號 當左括號數量小於右括號時,那就這能增加左括號...