把数字翻译成字符串_牛客题霸_牛客网
描述:
有一种将字母编码成数字的方式:'a'->1, 'b->2', ... , 'z->26'。
我们把一个字符串编码成一串数字,再考虑逆向编译成字符串。
由于没有分隔符,数字编码成字母可能有多种编译结果,例如 11 既可以看做是两个 'a' 也可以看做是一个 'k' 。但 10 只可能是 'j' ,因为 0 不能编译成任何结果。
现在给一串数字,返回有多少种可能的译码结果。
这道题主要是:
未说明特殊情况0时怎么处理,从测试用例看是严格的数字形式。
本人的解:
class Solution {
public:
/**
* 解码
* @param nums string字符串 数字串
* @return int整型
*/
int solve(string nums) {
int n = nums.size();
if(n == 1) return 1;
int ppre = 1, pre = 1;
if((nums[0] == '1' && nums[1] != '0')
|| (nums[0] == '2' && (nums[1] > '0' && nums[1] <= '6')))
{
pre = 2;
}
if(n == 2)
{
return pre;
}
int res = pre;
for(int i=2; i<n; ++i)
{
if(nums[i] == '0')
{
if(nums[i-1] == '1' || nums[i-1] == '2')
{
if(nums[i-2] == '1' || nums[i-2] == '2')
{
res /= 2;
}
}else
{
return 0;
}
}
else if((nums[i-1] == '1' && nums[i] != '0')
|| (nums[i-1] == '2' && (nums[i] > '0' && nums[i] <= '6')))
{
if(nums[i-2] == '1' || nums[i-2] == '2')
{
res = ppre + pre;
}else
{
res = pre * 2;
}
}
ppre = pre;
pre = res;
}
return res;
}
};