和全排列一样,甚至更简单,不需要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;
}