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

括号生成

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
};
全部评论

相关推荐

计算机类的会考啥啊
投递中国电信等公司10个岗位
点赞 评论 收藏
分享
08-27 21:03
已编辑
西南石油大学 Java
冷花幽露:大概率是了,京东面试就是这样。我上周一面也是20多分钟,面试官问的很刁钻的问题也答上来了,面完过了几天还是没推进,泡池子,昨天一看挂了。如果一面完第2天没有收到2面邀请,基本上不用抱希望了。如果你的bg是985,面试流程也是和我们一样,20多分钟,唯一区别就是面完他们会很快收到二面邮件,而不像我们泡池子然后挂掉
点赞 评论 收藏
分享
西二旗混子:不需要在简历上下功夫了,把时间放在找岗位上,海投2000个
无实习如何秋招上岸
点赞 评论 收藏
分享
评论
6
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务