9.4晚 字节前端笔试
有没有大哥帮忙看下代码啊为什么只过30%。然后就超时了不知道怎么优化了。测试用例也全过了的。
-1是钉子,珠子会左弹或者右弹, 1.第一种要素为钉子,当玩家的弹珠碰到钉子时,有可能会弹射到左下或者右下一格的位置。 2.第二种要素为得分点,当弹子经过得分点之后,可以获得得分点对应的分数。 如果当前格子不为钉子(即空白或者得分点)时,弹子会往正下方落下。 小M想知道,对于—个给定的版面,他最高可能获得多少分数。 输入 -1 0 -1 100 0 0 0 50 70 输出 50
var solutions = function(n,m,nums){
let res = -Infinity
var getway = function (left,right,last) {
// 跳出条件 到边界了
if(left>=n){
return
}else if(right>=m){
return
}else if(right<0){
return
}
// 是-1吗 是的话两边进行递归
if(nums[left][right]==-1){
getway(left+1,right-1,last)
getway(left+1,right+1,last)
return
}
if(last.length==0){
// 刚从入口进来
// dp[left][right] = nums[left][right]>dp[left][right]?nums[left][right]:dp[left][right]
dp[left][right] = nums[left][right]
}else{
// dp[left][right] = (nums[left][right] + dp[last[0]][last[1]])>dp[left][right]?(nums[left][right] + dp[last[0]][last[1]]):dp[left][right]
dp[left][right] = nums[left][right] + dp[last[0]][last[1]]
}
// dp完后更新 res
res = dp[left][right]>res?dp[left][right]:res
// 往下走
getway(left+1,right,[left,right])
}
let dp = new Array(n).fill(0).map((e,i)=>new Array(m).fill(0))
if(n==1&&m==1){
return nums[0][0]
}
// 弹珠走的路
// 先知道入口在哪
for(let i=0;i<m;i++){
if(nums[0][i] !=-1){
dp[0][i] = nums[0][i]
getway(0,i,[])
}
}
return dp
} 
