LeetCode 22. 括号生成(回溯/DP)
生活随笔
收集整理的這篇文章主要介紹了
LeetCode 22. 括号生成(回溯/DP)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 1. 題目
- 2. 解題
- 2.1 暴力回溯
- 2.2 DP
1. 題目
給出 n 代表生成括號的對數,請你寫出一個函數,使其能夠生成所有可能的并且有效的括號組合。
例如,給出 n = 3,生成結果為:["((()))","(()())","(())()","()(())","()()()" ]來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/generate-parentheses
著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。
2. 解題
2.1 暴力回溯
- 利用棧檢查是否有效
- 用左右括號數量來判斷:任何時候,右括號不能大于左括號個數
2.2 DP
另有DP解法,見別人解答
class Solution { //DP public:vector<string> generateParenthesis(int n) {if (n == 0) return {};if (n == 1) return { "()" };vector<vector<string>> dp(n+1);dp[0] = { "" };dp[1] = { "()" };for (int i = 2; i <= n; i++) { //求dp[i] 在所有dp[0],...dp[i-1]的基礎上進行組合for (int j = 0; j <i; j++) {for (string p : dp[j])for (string q : dp[i - j - 1]) { //j對括號的p,+ 1對新括號 + i-j-1對括號的 q = i對括號string str = "(" + p + ")" + q;dp[i].push_back(str);}}}return dp[n];} }; 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的LeetCode 22. 括号生成(回溯/DP)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LeetCode 476. 数字的补数(
- 下一篇: 屏幕Screen类文件编写