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

  • 相关阅读:
    dfs 与 剪枝
    杭电OJ1789、南阳OJ236(贪心法)解题报告
    多边形面积问题(hdoj2036)
    retain copy(浅复制) mutablecopy (深复制)
    IOS开发的目录结构
    UITableView 委托方法总结
    ios block
    UITableView 学习笔记
    iso socket基础2
    ios socket(基础demo)
  • 原文地址:https://www.cnblogs.com/panjingshuang/p/11664825.html
Copyright © 2011-2022 走看看