这题一开始看就那样,再看没思路,再看就跑路。

不至于不至于

你想下你做的最多是全排列,那种枚举类型的一看需要要用回溯,发现一个问题怎么回溯

他给你回溯的条件只有n,它代表了啥,左右括号都为n,我这题就是需要返回值的 我dfs的参数确定了,left,right,curStr

  • 回溯终止条件是啥?是不是我在回溯过程中left和right递归都为0就终止
  • 开始的调节是啥?是不是我left大于0就开始递归,当前字符串curStr+'('
  • 组合的调节是啥?是不是我right大于left才有有效组合,当前字符串是不是curStr+')'
  • 初始化是啥?是不是我我传参值为dfs(n,n,'')就可以返回结果了

我理解的回溯就是的模板,(简单勿喷~跟递归基本上是一样的)

const dfs = (x,y,z) => {
  if(终止条件){
    return
  }
  // 组合条件
  ...
}
// 初始化
dfs(x,y,z)

题解:

/**
  * 
  * @param n int整型 
  * @return string字符串一维数组
  */
function generateParenthesis( n ) {
    // write code here
    let res = []
    const dfs = (left,right,curStr) => {
        if(left == 0 && right == 0) {
            res.push(curStr)
            return
        }
        if(left > 0) {
            dfs(left - 1,right,curStr+'(')
        }
        if(right>left) {
            dfs(left,right - 1,curStr+')')
        }
    }
    dfs(n,n,"")
    return res
}
module.exports = {
    generateParenthesis : generateParenthesis
};