[Codewars]-Pyramid Slide Down

[Codewars]-Pyramid Slide Down(2018/3/31更新)

题目:

  • 从金字塔顶端到底部,寻找一条最长的路径。

思路:

  • 动态规划就行了
  • 这里我简单解释一下动态规划方法,从底部开始,把倒数第二层每个元素,分别加上下一层的相邻元素(可以选的下一步),,把最大的一个(最优的下一步)作为这层(倒数第二层)的新元素。
  • 比如:
   3
  7 4
 2 4 6 
8 5 9 3 
  • 最底下的一层是8 5 9 3,倒数第二层是2 4 6
  • 2可以选择下一层的8或者5作为下一步,而2+8>2+5,故把2+8=10,取代2,
  • 4可以选择下一层的5和9作为下一步,而4+9>4+5,故把4+9=13,取代4的位置
  • 同理6+9>6+3,倒数第二层变成了10 13 15,去掉(无视)最后一层,把倒数第二层最为新的最后一层。
  • 金字塔变成
     3
   7  4
 10 13 15 
  • 然后,金字塔变成
   3 
  20 19
  • 到最后只剩下一层,就是23,这个就是最优解了

解答:

function longestSlideDown (pyramid) {
    var res = pyramid.pop()
    while (pyramid){
        var cur = pyramid.pop()
        if(!cur){break ;return ;}
        var arr = []
        cur.forEach(function(ele,index){
            arr.push( cur[index]+Math.max( res[index],res[index+1] ) )
        })
        res = arr
    }
    return res.pop()
}

大神写法:

function longestSlideDown (pyramid) {
  return pyramid.reduceRight((last,current)=>current.map(
    (v,i)=>v+Math.max(last[i],last[i+1])
  ))[0];
}
  • 大神总是那么让人折服。

猜你喜欢

转载自blog.csdn.net/qq_41882147/article/details/79679701