59.括号生成(学习)
数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。
示例 1:
输入:n = 3
输出:[“((()))”,“(()())”,“(())()”,“()(())”,“()()()”]
示例 2:
输入:n = 1
输出:[“()”]
提示:
1 <= n <= 8
解析:
1.我们从generateParenthesis函数开始,传入要生成的括号对数n。
2.在generateParenthesis函数内部,我们初始化一个空数组result用于存储结果,并调用backtrack函数,传入空字符串’'作为初始括号字符
串,以及0作为初始的左括号和右括号数量。
3.backtrack函数开始递归地尝试所有可能的括号组合,直到找到所有有效的组合,并将它们添加到result数组中。
4.最后,generateParenthesis函数返回result数组,其中包含了所有有效的括号组合。
var generateParenthesis = function (n) {
const result = [];
// 回溯函数
function backtrack(s, left, right) {
// 当左右括号数量都达到 n 时,将当前字符串 s 加入结果数组
if (left === n && right === n) {
result.push(s);
return;
}
// 如果左括号数量小于 n,则可以添加一个左括号
if (left < n) {
backtrack(s + '(', left + 1, right);
}
// 如果右括号数量小于左括号数量,则可以添加一个右括号
if (right < left) {
backtrack(s + ')', left, right + 1);
}
}
// 调用回溯函数开始生成括号
backtrack('', 0, 0);
return result;
};