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 }