--算法恩仇录--实战篇--力扣(LeetCode)--022-括号生成--
这道题直接递归模拟添加括号。
注意不要放置过多的右括号。右括号和左括号是一一对应的。
代码:
/** * @param {number} n * @return {string[]} */ //使用递归 //每一个括号生成都是一一对应的关系 let list = []; function traval(l, r, n, s){ //左括号个数,右括号个数,总的括号数量,当前生成的字符串 if(l === r& l===n){ //如果左右括号都使用完毕,则结束递归,返回生成的字符串 list.push(s); return; } if(l > r){ // 如果已经放置的左括号数量比右括号多,则可以选择放置一个右括号 traval(l, r+1, n, s+')'); } if(l < n){ //如果左括号没有放完,则可以继续放置一个左括号 traval(l+1, r, n, s+'('); } } var generateParenthesis = function(n) { list = []; traval(0,0,n,''); return list; };
结果为:
执行用时:88 ms, 在所有 JavaScript 提交中击败了40.06%的用户
内存消耗:37.9 MB, 在所有 JavaScript 提交中击败了86.12%的用户
吐槽:写前端页面写多了,太久没有写递归,脑子有点笨,一开始竟然没写出来。。。
离大侠再近一步!