LeetCode(22):括號生成

題目描述

image

解題思路

我們可以將問題改寫成:
現(xiàn)在有2n個位置,每個位置可以放 ( 或者 ),組成的所有括號組合中,哪些是合法的?
解決這個問題只需要分2步:

  1. 暴力枚舉所有可能的情況,共有2的2n次方
  2. 在做選擇之前,進(jìn)行“剪枝”

1、暴力枚舉

只需要直接套用回溯算法的框架即可:

  • 當(dāng)path的長度為2n時,滿足結(jié)束條件,將path加入res中
  • 基于選擇列表【"(", ")"】,做選擇
  • 遞歸調(diào)用
  • 撤銷選擇
const dfs = function(path) {
    if(path.length === 2*n){
    res.push(path.join(""))
    }

    path.push('(')
    dfs(path)
    path.pop()

    path.push(')')
    dfs(path)
    path.pop()
}

2、“剪枝”

基于當(dāng)前的路徑,如何判斷當(dāng)前的括號組合是否合法?
不難發(fā)現(xiàn):如果當(dāng)前的路徑中,左括號數(shù)量小于右括號的數(shù)量,那么這一定是不合法的括號組合

如何判斷當(dāng)前路徑已經(jīng)結(jié)束?
很簡單,只要看路徑的長度是否為2n即可

代碼實(shí)現(xiàn)(JavaScript)

在核心函數(shù)dfs中,我們可以用2個變量left和right,記錄已經(jīng)使用的左右括號數(shù)量
在做選擇之前:

  • 對當(dāng)前路徑的合法性進(jìn)行判斷
  • 判斷當(dāng)前路徑是否滿足結(jié)束條件
var generateParenthesis = function(n) {
    const res = new Array()

    const dfs = function(left,right,path) {
        if(left>n || right>n) {
            return
        }
        if(left < right) {
            return
        }
        if(path.length === 2*n){
            res.push(path.join(""))
            return
        }
        
        path.push('(')
        dfs(left+1, right, path)
        path.pop()

        path.push(')')
        dfs(left, right+1,path)
        path.pop()
    }

    dfs(0,0,[])
    return res
};
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 數(shù)字 n 代表生成括號的對數(shù),請你設(shè)計(jì)一個函數(shù),用于能夠生成所有可能的并且 有效的 括號組合。 解法:使用回溯控制...
    清晨我上馬閱讀 82評論 0 0
  • 題目 給出 n 代表生成括號的對數(shù),請你寫出一個函數(shù),使其能夠生成所有可能的并且有效的括號組合。 例如,給出 n ...
    半畝房頂閱讀 402評論 0 1
  • 參考:第7課-泛型遞歸、樹的遞歸 LeetCode-22. 括號生成 22. 括號生成 數(shù)字 n 代表生成括號的對...
    傅晨明閱讀 248評論 0 0
  • 1.題目描述 給出 n 代表生成括號的對數(shù),請你寫出一個函數(shù),使其能夠生成所有可能的并且有效的括號組合。例如,給出...
    NWPU_HaiboWu閱讀 200評論 0 1
  • 漸變的面目拼圖要我怎么拼? 我是疲乏了還是投降了? 不是不允許自己墜落, 我沒有滴水不進(jìn)的保護(hù)膜。 就是害怕變得面...
    悶熱當(dāng)乘涼閱讀 4,464評論 0 13

友情鏈接更多精彩內(nèi)容