题目

思路:动态规划
- dp[i]表示以arr[i]结尾的数字翻译出字符串的种数
- 如果当前位能和前一位组成一个10-25的数字,则当前位有两种翻译方式,一种是单独,一种是两个一起。dp也就有两种来源
- 类比跳台阶
- 转移方程:
dp[i] = dp[i - 1] + dp[i - 2]或者dp[i] = dp[i - 1];

代码
class Solution {
public int translateNum(int num) {
String str = String.valueOf(num);
int[] dp = new int[str.length()];
dp[0] = 1;
if (str.length() == 1) return dp[0];
int tmp = Integer.parseInt(str.substring(0, 2));
if (tmp >= 10 && tmp <= 25) {
dp[1] = 2;
} else {
dp[1] = 1;
}
for (int i = 2; i < str.length(); i++) {
tmp = Integer.parseInt(str.substring(i - 1, i + 1));
if (tmp >= 10 && tmp <= 25) {
dp[i] = dp[i - 1] + dp[i - 2];
} else {
dp[i] = dp[i - 1];
}
}
return dp[str.length() - 1];
}
}