Cosen95 / js_algorithm

🏂js数据结构与算法 系统学习
36 stars 10 forks source link

括号生成 #26

Open Cosen95 opened 4 years ago

Cosen95 commented 4 years ago

leetcode: https://leetcode-cn.com/problems/generate-parentheses/

Cosen95 commented 4 years ago

题目难度medium,涉及到的算法知识有递归、回溯。

题目描述

数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。

示例:

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

思路分析

这道题目通过递归去实现。

因为左右括号需要匹配、闭合。所以对应“(”和“)”的数量都是n,当满足这个条件时,一次递归就结束,将对应值放入结果数组中。

这里有一个潜在的限制条件:有效的括号组合。对应逻辑就是在往每个位置去放入“(”或“)”前:

代码实现

/**
 * @param {number} n
 * @return {string[]}
 */
var generateParenthesis = function(n) {
    let res = []
    const generate = (cur, left, right) => {
        if (left ===n && right === n) {
            res.push(cur)
            return
        }
        if (left < n) {
            generate(cur + '(', left + 1, right)
        }
        if (right < left) {
            generate(cur + ')', left, right + 1)
        }
    }
    generate('', 0, 0)
    return res
};