把数字翻译成字符串
题目描述
给定一个数字,我们按照如下规则把它翻译成字符串:0翻译成“a”,1翻译成“b”……,11翻译成“l”,25翻译成“z”。一个数可能有多种翻译。请编程实现一个函数,用来计算数字有多少种不同的翻译方法。
思路分析
可以选一个数字或两个连续的数字(10~25)翻译成一个字符。
定义f(i)f(i):从第i位数字开始的不同翻译数目
1)若第i个数字和第i+1个数字拼接成的数字在10~25范围内,则递归式子为:
f(i)=f(i+1)+f(i+2)
2)否则
f(i)=f(i+1)
为了防止重复计算,按i从大到小计算。
代码如下:
public static int translate(int num){
String strNum=String.valueOf(num);
int[] array=new int[numStr.length()];
array[array.length-1]=1;
int count;
for(int i=array.length-2;i>=0;i--){
count+=array[i+1];
int num1=numStr.charAt(i)-'0';
int num2=numStr.charAt(i+1)-'0';
int connectedNum=num1*10+num2;
if(connectedNum>=10&&connectedNum<=25){
if(i==numStr.length()-2){
count++;
}else{
count+=array[i+2];
}
}
array[i]=count;
}
count=array[0];
return count;
}