题目
给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”。一个数字可能有多个翻译。请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。
解题思路
这题目需要一定逻辑归纳能力, 我们从最简单的数字归纳, 当只有2位数的时候, 只有当前数字小于等于25并且大于10的时候才会返回2,不然别的数据就是都返回1, 那么如果3位数的时候, 我们就会发现, 前两个的条件还是一样的, 当移位到第三位的时候, 我们可以发现当第二位和第三位组合是小于等于25并且大于10的时候, 我们是2+1=3, 其他情况下我们还是2,当出现第四位的时候, 我们可以发现最后两位如果小于等于25并且大于10的时候, 我们最后结果是3+2=5, 所以归纳得出 当从第二位开始只取2位数的时候小于等于25并且大于10的时候, 我们的结果是前前一个总和+前一个总和, 当其他情况的时候, 总和情况不变,所以我们如下实现代码即可。
Java代码实现
public class TranslateNum {
public int translateNum(int num) {
int preRes = 1;
int curRes = 1;
int res = 1;
char[] strs = String.valueOf(num).toCharArray();
char pre = strs[0];
int ten = 10;
for (int i = 1; i < strs.length; i++) {
int newNum = Integer.parseInt(String.valueOf(pre)) * ten +Integer.parseInt(String.valueOf(strs[i]));
if(newNum <= 25 && newNum >= 10){
res = preRes + curRes ;
}
preRes = curRes;
curRes = res;
pre = strs[i];
}
return res;
}
}