有一种将字母编码成数字的方式:'a'->1, 'b->2', ... , 'z->26'。
现在给一串数字,返回有多少种可能的译码结果
数据范围:字符串长度满足
进阶:空间复杂度
,时间复杂度
有一种将字母编码成数字的方式:'a'->1, 'b->2', ... , 'z->26'。
"12"
2
2种可能的译码结果(”ab” 或”l”)
"31717126241541717"
192
192种可能的译码结果
int solve(char* nums ) {
int numsLen = strlen(nums);
if(numsLen<1)
return 0;
else if(numsLen<2) {
if(nums[0]>='1' && nums[0]<='9')
return 1;
else
return 0;
}
else if(numsLen<3) {
int val = (nums[0]-'0')*10+(nums[1]-'0');
if(val<=9)
return 0;
else if(val%10==0) {
if(val==10 || val==20)
return 1;
else
return 0;
}
else if(val<=26)
return 2;
else
return 1;
}
else {
if(nums[1]=='0') {
if(nums[0]>='3')
return 0;
else if(nums[0]=='0')
return 0;
else
return solve(nums+1);
}
else if(nums[1]<'7') {
if(nums[0]>='3' || nums[0]=='0')
return solve(nums+1);
else
return solve(nums+1)+solve(nums+2);
}
else {
if(nums[0]>='2' || nums[0]=='0')
return solve(nums+1);
else
return solve(nums+1)+solve(nums+2);
}
}
}