题解 | #括号生成#回溯法

括号生成

http://www.nowcoder.com/practice/c9addb265cdf4cdd92c092c655d164ca

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

不至于不至于

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

他给你回溯的条件只有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
};
全部评论

相关推荐

牛客120493863号:你姐东南大学硕士在读,那就找导师或者师兄师姐打听下同门同方向前辈就业最好的是去向哪几家公司了呗(如果不想走考公选调的话),这个是最有参考性的。
点赞 评论 收藏
分享
戏子多秋m:项目做了有,但是没奖项,没实习,学校可能没有太大优势,建议项目写三个就可以了,技能点可能得优化下,个人感觉,我也是菜鸡,不是很懂,单纯个人建议,感觉秋招还在捞双非,加油兄弟
点赞 评论 收藏
分享
评论
6
收藏
分享
牛客网
牛客企业服务