JZ46-把数字翻译成字符串
原题链接
描述
给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”。一个数字可能有多个翻译。请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。
示例
输入: 12258
输出: 5
解释: 12258有5种不同的翻译,分别是"bccfi", "bwfi", "bczi", "mcfi"和"mzi
思路
动规。从右向左遍历每一位数,之所以会有不同的翻译方法,就是看第 i 位和第 i - 1 位组成的数字能否成功匹配到一个新的字母(i不为0)。正常而言,如果没数字的话,那么翻译方法也是0,只有一位数的话翻译方法是 1。但是通过推算可以找到规律,如果第 i -1 位和第 i - 2 位可以匹配到新字母的话,f(i) = f(i-1) + f(i-2)。为了便于计算我们规定没数字的话,那么翻译方法也是 1 。
解答
class Solution {
public int translateNum(int num) {
int res = 1;// 结果至少是
int tail = num % 10;// 保存尾随在后面的数
int pre1 = 1, pre2 = 1;
num /= 10;
while (num != 0) {
int digit = num % 10;
if (tail + digit * 10 <= 25 && tail + digit * 10 != tail)
res = pre1 + pre2;
else
res = pre1;
pre2 = pre1;
pre1 = res;
tail = digit;
num = num / 10;
}
return res;
}
}
本文来自博客园,作者:klaus08,转载请注明原文链接:https://www.cnblogs.com/klaus08/p/15312991.html