/**
* 题目:把数字翻译成字符串。
* 0翻译成a..25翻译成z。 如12258有5种翻译方法分别是bccfi,bwfi,bczi,mfi,mzi
*
* @author hexiaoli
* 思路:剑指offer eg:从右到左翻译并计算不同翻译的数目,解除重复子问题。
*/
public class Main {
public static int getTransactionCount(int number) {
// 非法输入
if (number < 1) {
return -1;
}
// 将数字转化为字符串数组
char[] charArray = String.valueOf(number).toCharArray();
int length = charArray.length;
if (length == 1) {
return 1;
}
// 初始化迭代变量
int var1 = 1;
int var2 = 1;
// 结果
int result = 0;
// 从倒数第二个开始
for (int i = length - 2; i >= 0; i--) {
result = var1;
int digit = (charArray[i] - '0') * 10 + (charArray[i + 1] - '0');
if (digit >= 10 && digit <= 25) {
result += var2;
}
// 更新迭代变量
var2 = var1;
var1 = result;
}
return result;
}
public static void main(String[] args) {
System.out.println(getTransactionCount(1));
System.out.println(getTransactionCount(12));
System.out.println(getTransactionCount(12258));
}
}