zoukankan      html  css  js  c++  java
  • 括号生成

    给出 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
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

  • 相关阅读:
    021 顺时针打印矩阵
    020 二叉树的镜像
    019 树的子结构
    018 机器人的运动范围
    017 矩阵中的路径
    022 Jquery总结
    003 css总结
    002 html总结
    016 合并两个排序的链表
    015 反转链表
  • 原文地址:https://www.cnblogs.com/panjingshuang/p/11664825.html
Copyright © 2011-2022 走看看