public class E46Translation {
//计算数字的翻译方式,1-'a'... 25-'z'
public static int getTranslationCount(int number) {
if (number < 0)
return -1;
char[] numbers = String.valueOf(number).toCharArray();
return getTranslationCount(numbers);
}
private static int getTranslationCount(char[] numbers) {
int length = numbers.length;
//count[i]记录以第i个数字开头字段的翻译方式数量
int[] counts = new int[length];
for (int i = length - 1; i >= 0; i--) {
int count = 0;
//0-9数字的翻译方式计算
if (i < length - 1)
count += counts[i + 1];
else
count += 1;
//10-25数字的翻译方式计算
if (i < length - 1) {
int sum = Integer.valueOf(numbers[i] + String.valueOf(numbers[i + 1]));
if (sum >= 10 && sum <= 25) {
if (i < length - 2)
count += counts[i + 2];
else
count += 1;
}
}
counts[i] = count;
}
return counts[0];
}
//测试用例
public static void main(String[] args) {
int number = 12258;
System.out.println(E46Translation.getTranslationCount(number)); //5
}
}
转载:https://blog.csdn.net/csdn_zjp/article/details/102490510
查看评论