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