概:一个中等难度的面试题,涉及动态规划内容,然后我就又不会了,我就又看了题解(什么时候我才能正儿八经学会自己用动态规划)
给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”。一个数字可能有多个翻译。请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。
来源:力扣(LeetCode)
链接:面试题46_把数字翻译成字符串
示例 1:
输入: 12258
输出: 5
解释: 12258有5种不同的翻译,分别是"bccfi", “bwfi”, “bczi”, “mcfi"和"mzi”
public class Solution
{
public int translateNum(int num) {
int r [] = {0,1,1,0}; //上一位数,俩位前的翻译方式,一位前的翻译方式,当前位的翻译方式
int n = 1;
while(num/n>=10)
{
n*=10;
}
while(n>0)
{
if((r[0]*10+num/n)>=10&&(r[0]*10+num/n)<=25)
{
r[3] = r[1]+r[2];
}
else
{
r[3] = r[2];
}
r[0] = num/n;
num -= (num/n)*n;
n/=10;
r[1] = r[2];
r[2] = r[3];
}
return r[3];
}
}