[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
解答:
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];
}