有一种将字母编码成数字的方式:'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); } } }