括号生成
回溯思路
重点是判断当前生成的括号是否合理:左括号数目一定大于等于右括号
。
代码
/**
* @param {number} n
* @return {string[]}
*/
var generateParenthesis = function(n) {
let res = [];
var fn = function(track, select){
let leftnum = track.split("(").length-1;
let rightnum = track.split(")").length-1;
// 不合法
if(leftnum<rightnum || track.length>2*n) return;
// 有效的括号组合
if(leftnum==rightnum && track.length==2*n){
res.push(track);
return;
}
for(let i=0; i<select.length; i++){
track+=select[i];
fn(track, select);
track = track.substring(0, track.length-1);
}
}
fn("", ["(", ")"]);
return res;
};