题解 | #69.把数字翻译成字符串#

把数字翻译成字符串

http://www.nowcoder.com/practice/046a55e6cd274cffb88fc32dba695668

卡在了第9个测试点

"72910721221427251718216239162221131917242"

为什么错误呢,729107碰到七的时候我直接dp[i] = dp[i-1] + dp[i-2] 实际上nums[i-1]='0'使得dp[i] = dp[i-1]

状态转移方程看代码就可以,

function solve( nums ) {
  
  let index;
  for(index=0; index<nums.length; index++)
    if(nums[index] != '0')
      break;
  
  nums = nums.substring(index,nums.length);
  
  let dp = new Array(nums.length);
  
  if(nums.length == 0)
    return 0;
  if(nums.length == 1 && nums[0]=='0')
    return 0;
  if(nums.length == 1)
    return 1;
  if(nums[1] != '0' && parseInt(nums[0]+nums[1]) <=26)
    dp[1] = 2;
  else
    dp[1] = 1;
  
  dp[0] = 1;
  
  
  for(let i=2; i<nums.length; i++){
    if(nums[i] == '0'){
      if(nums[i-1] == '0')//连着两个0直接返回0
        return 0;
      else if(nums[i-1]<='2')//对应10和20的情况
        dp[i] = dp[i-2];
      else//对应30/40非法直接返回0
        return 0;
    }
    else{
      if(nums[i-1]=='0')
        dp[i] = dp[i-1]
      else if( parseInt(nums[i-1]+nums[i]) <= 26 )
        dp[i] = dp[i-1] + dp[i-2];
      else
        dp[i] = dp[i-1];
    } 
  }
  return dp[nums.length-1];
}
全部评论
如果nums[1]=='0'&&parseInt(nums[0]+nums[1])>26,本应该返回0,按你的算法可能不会,因为这种情况下你讲dp[1]设为了1
点赞 回复 分享
发布于 2022-10-26 10:26 江西

相关推荐

黑着眼圈看手机:pdd秋招笔试挂了,春招还行吗
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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