//把数字转化成字符串
/*
* 思路:以12258为例,如果从左往右递归,会造成重复计算子问题,我们从右往左计算,创建一个辅助数组,数组的值保存的是
* 从当前下标的元素到数组末尾元素这一段子字符串有多少种翻译方法,数组的第i个元素值与数组的第i+1个值和第i+2个值有关
* f(i)=f(i+1)+g(i,i+1)*f(i+2),其中g(i,i+1)的值和字符串中第i和第i+1个元素组合是否处于[10,25]区间内有关
* 若在区间内,则f(i)=f(i+1)+f(i+2),否则f(i)=f(i+1)
* */
1 public static int getTranslationCounts(String str){ 2 int len=str.length(); 3 //创建一个辅助数组 4 int [] counts=new int [len]; 5 int index=len-1; 6 while(index>=0){ 7 if (index==len-1) counts[index]=1; 8 else { 9 //判断当前字符串的元素和后一个元素拼接起来是否在区间内 10 Character ch1=str.charAt(index); 11 Character ch2=str.charAt(index+1); 12 int digit1=Integer.valueOf(ch1.toString()); 13 int digit2=Integer.valueOf(ch2.toString()); 14 if (digit1*10+digit2>=10&&digit1*10+digit2<=25){ 15 if (index==len-2){ 16 counts[index]=counts[index+1]+1; 17 }else { 18 counts[index]=counts[index+1]+counts[index+2]; 19 } 20 }else { 21 counts[index] = counts[index + 1]; 22 } 23 } 24 index--; 25 } 26 return counts[0]; 27 }