--算法恩仇录--实战篇--力扣(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%的用户
 
吐槽:写前端页面写多了,太久没有写递归,脑子有点笨,一开始竟然没写出来。。。
posted @ 2020-09-02 16:33  小虾米在code江湖  阅读(126)  评论(0编辑  收藏  举报