加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

括号生成(力扣网)

(2022-04-14 17:30:06)
数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。

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

示例 2:
输入:n = 1
输出:["()"]

提示:
    1 <= n <= 8

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/generate-parentheses

这个道题看着很简单,如果会递归,也很简单(可惜我只是会点皮毛括号生成(力扣网)
直接上代码:
var generateParenthesis function(n{
    var res [];
    function list(l,r,str){
        if(str.length == 2*n){
            res.push(str);
            return;
        }
        if(l 0){
            list(l-1,r,str+'(');
        }
        if(l<</span>r){
            list(l,r-1,str+")");
        }
    }
    list(n,n,"");
    return res;
};

代码是不是超简单,我思考了很久,我考虑到了递归,但应该怎么递归,我就有点头疼。
此解是我在看别人的解法后,按照他的思路来写的。
说说我的理解吧。

首先一点,数字n,那么符合要求的字符串的长度是2*n,这是递归分支的终点。
然后就是插入的规则。
就是这个规则我脑瓜嗡了一会,现在也是五分之四解,勉强超过半解。

我看人家的方案,解释很简单:只要右括号还有,就插,如果左括号剩余数目大于右括号剩余数目,就插。
是不是很神奇,这就完事了。
是的,我当时也嗡嗡的!

后面细想一下,这个没毛病。
首先这是递归,如果只考虑将左右括号消耗完,不需要考虑其他,会将所有左右括号排列情况遍历出来。
这个限制条件很简单,加入即可!

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有