LeetCode22.括号生成 JavaScript

51次阅读

共计 843 个字符,预计需要花费 3 分钟才能阅读完成。

给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。
例如,给出 n = 3,生成结果为:
[
“((()))”,
“(()())”,
“(())()”,
“()(())”,
“()()()”
]
答案参考:
/**
* @param {number} n
* @return {string[]}
*/
var generateParenthesis = function(n) {
if (n == 1) {
return [“()”];
}

let maxCombo = [];
maxCombo[0] = 0;
for (let i = 1; i < n * 2; i++) {
if (i > n + 1) {
maxCombo[i] = 0;
} else {
maxCombo[i] = 1;
}
}

let maxComboCount = parseInt(maxCombo.join(”), 2);
let leastComboCount = parseInt(Array(n).fill(1).join(”), 2);
let results = [];

for (let i = leastComboCount; i < maxComboCount; i++) {
let binary = i.toString(2);

let balancer_0 = n * 2 – binary.length;
let balancer_1 = 0;
let cont = false;

let result = ”;

for (let j = 0; j < balancer_0; j++) {
result += ‘(‘;
}

for (let j = 0; j < binary.length; j++) {
if (binary[j] == ‘0’) {
balancer_0 += 1;
result += ‘(‘;
} else {
balancer_1 += 1;
result += ‘)’;
}

if (balancer_1 > balancer_0) {
cont = true;
break;
}
}

if (cont || balancer_0 != balancer_1) {
continue;
}

results.push(result);
}
return results;
};

正文完
 0