括号生成(力扣网)
(2022-04-14 17:30:06)
数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。
示例 1:
输入:n = 3
输出:["((()))","(()())","(())()","()(())","()()()"]
示例 2:
输入:n = 1
输出:["()"]
提示:
1 <= n
<= 8
来源:力扣(LeetCode)
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;
示例 1:
输入:n = 3
输出:["((()))","(()())","(())()","()(())","()()()"]
示例 2:
输入:n = 1
输出:["()"]
提示:
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/generate-parentheses
这个道题看着很简单,如果会递归,也很简单(可惜我只是会点皮毛
)

直接上代码:
var generateParenthesis = function(n) {
};
代码是不是超简单,我思考了很久,我考虑到了递归,但应该怎么递归,我就有点头疼。
此解是我在看别人的解法后,按照他的思路来写的。
说说我的理解吧。
首先一点,数字n,那么符合要求的字符串的长度是2*n,这是递归分支的终点。
然后就是插入的规则。
就是这个规则我脑瓜嗡了一会,现在也是五分之四解,勉强超过半解。
我看人家的方案,解释很简单:只要右括号还有,就插,如果左括号剩余数目大于右括号剩余数目,就插。
是不是很神奇,这就完事了。
是的,我当时也嗡嗡的!
后面细想一下,这个没毛病。
首先这是递归,如果只考虑将左右括号消耗完,不需要考虑其他,会将所有左右括号排列情况遍历出来。
这个限制条件很简单,加入即可!
前一篇:四数之和(力扣网)
后一篇:迷你语法分析器(力扣网)