卡在了第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];
}