22.括号生成-回溯解法

数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。

 

示例 1:

输入:n = 3
输出:["((()))","(()())","(())()","()(())","()()()"]
示例 2:

输入:n = 1
输出:["()"]
 

提示:1 <= n <= 8

来源:力扣(LeetCode)


抽象为树形结构,树的DFS(不太熟练,所以没有思路)

剪枝策略 判断条件:open>n  、close 为第一个 、close>open

 

 

 

 

 

/**
 * @param {number} n
 * @return {string[]}
 */
var generateParenthesis = function(n) {
    const res = [];
    if(n <= 0) return res;
    const dfs = (path,open,close) =>{
        if(open > n || close > open) return
        if(path.length == 2*n){
            res.push(path)
            return
        }
        dfs(path + "(",open +1,close)
        dfs(path + ")",open,close+1)

    }
    dfs("",0,0);
    return res;

};

 

posted @ 2022-05-13 20:27  Clematis  阅读(40)  评论(0)    收藏  举报