给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”。一个数字可能有多个翻译。请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。
剑指 Offer 46. 把数字翻译成字符串 - 力扣(LeetCode) (leetcode-cn.com)
思路:动态规划,假设以当前位为结尾的序列的翻译方法有f(n)种,如果当前位和前一位组成的数字在10-25之间,当前位既可以单独翻译成一个字母,也可以和前一位组合翻译成一个字母,那么f(n)=f(n-1)+f(n-2),如果当前位不能和前一位组合翻译,那么f(n)=f(n-1)
class Solution {
public int translateNum(int num) {
String s = String.valueOf(num);
int[] arr = new int[s.length()];
int[] f = new int[arr.length + 1];
for(int i = 0; i < arr.length; i++){
arr[i] = s.charAt(i) - '0';
}
f[0] = 1;
f[1] = 1;
for(int i = 2; i < f.length; i++){
f[i] = f[i - 1];
int temp = arr[i - 2] * 10 + arr[i - 1];
if(temp < 26 && temp > 9){
f[i] += f[i - 2];
}
}
return f[f.length - 1];
}
}