题目描述

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

示例:

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

解题思路

这个题目的一个比较直接的思路就是使用递归,对于左括号的数量,要控制小于n,对于右括号的数量,要控制小于左括号的数量,并且要小于n,这样不断递归,保存可能的结果。

代码实现

/**
* @param {number} n
* @return {string[]}
*/
function fn(left, right, n, s, res){
if(left === n && right === n){
return res.push(s)
}
if(left < n){
fn(left+1, right, n, s+'(', res)
}
if(right < left){
fn(left, right+1, n, s+')', res)
}
}

var generateParenthesis = function(n) {
let res = []
fn(0, 0, n, '', res)
return res
};

提交结果

【LeetCode 22】括号生成_算法