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

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

    示例:

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

    递归

    首先是括号不匹配版本的,在 webstorm 里面跑了一下。
    对于递归来说,最重要的还是 1. recursion terminator ; 2. process data in current logic ; 3. drill down to the next level; 4. reverse if needed

    var main = function () {
      console.log(generateParenthesis(3));
    };
    var generateParenthesis = function (n) {
      _generate(0, 2 * n, "");
    };
    
    var _generate = function (level, max, s) {
      // terminator
      if (level >= max) {
        console.log(s);
        return;
      }
      // process current logic: left, right
      let s1 = s + "(";
      let s2 = s + ")";
      // drill down
      _generate(level + 1, max, s1);
      _generate(level + 1, max, s2);
      // reverse states
    };
    main();
    

    括号匹配的

    /**
     * @param {number} n
     * @return {string[]}
     */
    var generateParenthesis = function(n) {
        let res = [];
        _generate(res, 0, 0, n, '');
        return res;
    };
    
    var _generate = function(res, left, right, n, s) {
        // terminator
        if(left === n && right === n) {
            res.push(s);
            return s;
        }
        // process current
        if(left < n) {
            _generate(res, left + 1, right, n, s + '(');
        }
        if(left > right && right < n) {
            _generate(res, left, right + 1, n, s + ')');
        }
    }
    
  • 相关阅读:
    Java常见的10个异常
    HashMap 和 Hashtable 的 6 个区别
    JSP随记
    Java> ArrayList的扩容因子为什么是1.5?
    Java> 有趣的byte及位运算
    前导0计数Integer.numberOfLeadingZeros,后缀0计数Integer.numberOfTailingzeros
    结构型模式
    结构型模式
    结构型模式
    结构型模式
  • 原文地址:https://www.cnblogs.com/ssaylo/p/13476144.html
Copyright © 2011-2022 走看看