今日算法之_90_把数字翻译成字符串
前言
Github:https://github.com/HealerJean
1、把数字翻译成字符串
给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”。一个数字可能有多个翻译。
请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。
1.1、解题思路
有一点像打家劫舍。比如,当前位置为i,我们需要判断
i-1
和i
能否构成->大于等于10,小于等于25的数字。如果能构成,则肯定是f(i-2)+f(i-1)
中翻译方法,因此我讲pre
设置为i-2
,的值,post
设置为i-1
的值,last
位置为i
的值最终得出如下解法
1.2、算法
public int translateNum(int num) {
String string = String.valueOf(num);
// i = 0 的时候,不用判断,最大last肯定为 1 。移动i = 2的时候,还会为1。这样就移动3次了
int pre = 0, post = 1, last = 1;
for (int i = 1; i < string.length(); ++i) {
pre = post;
post = last;
//截取 上一个字符串和当前字符串
String str = string.substring(i - 1, i + 1);
Integer value = Integer.valueOf(str);
if (value <= 25 && value >= 10) {
last = post + pre;
}
}
return last;
}
1.3、测试
@Test
public void test() {
System.out.println(translateNum(125214));
}