22. 括号生成

题目链接:https://leetcode-cn.com/problems/generate-parentheses/

思路:

  1. 「暴力求解法」。比如n为3,那么返回的一个字符串的长度应该为2*n,即为6。等价于我们要在6个「格子」中填充,每个「格子」有两种选择。( '(' 或者 ')' ),这样的话时间复杂度为O(2^2n)。

  2. 「剪枝法」。在「暴力求解法」的基础上,增加一些「validate」,可以删去很多的操作。
    比如:

  • 局部字符串,判断是否有效,第一个字符填充')',则不必考虑之后「格子」填充的情况。
  • n个括号,则最多有n个左括号和n个右括号,我们记录左括号使用数left,和有括号使用数right。
/**
 * @param {number} n
 * @return {string[]}
 */
var generateParenthesis = function(n) {
    let list = [];
    __gen__(0, 0, n, '');
    return list;

    function __gen__(left, right, n, result) {

        // 终止条件,left和right都用完了,那么就把当前的result放入list数组中
        if(left === n && right === n) {
            list.push(result);
            return;
        }

        // 添加左括号的条件,只有left个数小于总数n即可
        if(left < n) {
            __gen__(left + 1, right, n, result + '(');
        }

        // 添加有括号的条件,不仅仅是right个数小于总数n,而且不能大于left个数。
        if(right < n && right < left) {
            __gen__(left, right + 1, n,result + ')');
        }
        
    }
};
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 一、题目 给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。 例如: 二、...
    Mage阅读 3,025评论 0 0
  • 题目描述 给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。 例如,给出 ...
    莫小鹏阅读 2,939评论 0 0
  • 给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。 例如,给出 n = 3...
    闭门造折阅读 1,076评论 0 0
  • 题目描述: 给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。 示例: 例...
    夜空中最亮的星_6c64阅读 1,490评论 0 0
  • 熬夜,现在成了不少人的通病。 因此也是出了不少说法,比如:既然熬夜对身体不好,那通宵吧。当然啦,对于这说法大家可不...
    静待丶绽放阅读 2,806评论 0 0

友情链接更多精彩内容