Leetcode演算法題22 括號生成

2021-10-04 21:36:32 字數 1274 閱讀 5376

廣度優先(佇列實現 + 自定義結點類)

反思與總結

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