给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。
思路和算法
只有在我们知道序列仍然保持有效时才添加 ‘(’ or ‘)’,我们可以通过跟踪到目前为止放置的左括号和右括号的数目来做到这一点,
如果我们还剩一个位置,我们可以开始放一个左括号。 如果它不超过左括号的数量,我们可以放一个右括号。
/**
* @param {number} n
* @return {string[]}
*/
var generateParenthesis = function(n) {
let res = [];
function generate(left, right, result){
if(left == n && right == n){
res.push(result);
return;
}
if(left < n){
generate(left + 1, right, result + "(" );
}
if(left > right && right < n) generate(left, right + 1, result + ")");
}
generate(0, 0, "");
return res;
};
//Runtime: 72 ms, faster than 97.01% of JavaScript online submissions for Generate Parentheses.