和全排列一样,甚至更简单,不需要used数组记录使用情况
递归
终止条件:left==n && right==n
本级任务:
- 左括号没用完,加左括号
- 左括号<=n并且left>right时,加右括号
不要忘记回溯即可
function generateParenthesis( n ) {
let str = '';
let res = [];
function traceTrack(left,right){
if(left==n && right==n){
res.push(str);
}
if(left<n ){
str += '(';
traceTrack(left+1,right);
str = str.slice(0,str.length-1);
}
if(left<=n && left>right){
str += ')';
traceTrack(left,right+1);
str = str.slice(0,str.length-1);
}
}
traceTrack(0,0);
return res;
}