括号生成

Posted panjingshuang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了括号生成相关的知识,希望对你有一定的参考价值。

给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。

例如,给出 n = 3,生成结果为:

[
"((()))",
"(()())",
"(())()",
"()(())",
"()()()"
]

/**
 * @param {number} n
 * @return {string[]}
 */
var generateParenthesis = function(num) {
    let temp = [];

    var check = function(sum,arr){
        if(arr.length === 2*num){
            if(sum === 0){
                var a = arr.slice().join(‘‘).replace(/-1/g,")").replace(/1/g,"(");
                temp.push(a);
            }
            
            return;
        }
        
        //当前位置数据是1
        let value = sum +1;
        if(value >=0&& value<=num){
            arr.push(‘1‘);
            check(value,arr);
            arr.pop();
        }
        //当前位置数据是-1
        value = sum -1;
        if(value>=0&& value<=num){
            arr.push(‘-1‘);
            check(value,arr);
            arr.pop();
        }

    }
    check(0,[]);
    return temp;
};

 

 

实现方式:主要是使用回溯的方法,以n=3为例 ,有n个"("那么就有")"n个,总共有2n个位置需要填充,每个位置填充的时候,有两种情况 “(”和")”,我们可以使用1和-1来替换( 和),进行填充的时候,当所填充的所有位置的数据和小于0的时候,说明已经填充的数据的")"要多于"(",所以不再向下填充数据,减枝,当所填充的数据值超过了n的时候,说明“(”填充多了,也进行剪枝,当所填充的位置的个数等于2n的时候,说明所填充的数据是合适的,然后将其放入列表,停止向下填充并向上回溯另一条路线。

来源:https://leetcode-cn.com/problems/generate-parentheses/solution/gua-hao-tai-fu-za-shu-zi-zhuan-hua-ta-by-da-lian-m/

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/generate-parentheses
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

以上是关于括号生成的主要内容,如果未能解决你的问题,请参考以下文章

postman 自动生成 curl 代码片段

vue2.0 代码功能片段

asp.net 使用正则表达式验证包含打开/关闭括号片段的属性字符串

当我在括号中调用它时,Thymeleaf 不会解析我的应用程序中的片段。这是为啥?

括号生成--力扣

Apollo Codegen 没有找到生成代码的操作或片段