1 题目描述
2 算法思路
思路:
- 假设第i - 1个数字,翻译的方法是dp[i - 1]
- 那么dp[i] 就拥有两个情况,如下图
- 一个是当前的数字可以和前一个数字进行翻译,也就是属于[0,25] ,那么dp[i] = dp[i -1] + dp[i -2]
- 如果当前的数字不可以和前一个数字进行翻译,那么dp[i] = dp[i - 1]
动态规划:
- 状态定义:dp[i] 代表第i个数字的翻译数量
- 转移方程:
- 一个是当前的数字可以和前一个数字进行翻译,也就是属于[0,25] ,那么dp[i] = dp[i -1] + dp[i -2]
- 如果当前的数字不可以和前一个数字进行翻译,那么dp[i] = dp[i - 1]
- 初始状态:dp[0] = dp[1] = 1,就是“无数字”和只有一个数字的情况,只有一个翻译方法
- 返回值dp[n]
3 代码
class Solution {
public int translateNum(int num) {
String s = String.valueOf(num);
int a = 1; //dp[i - 2]
int b = 1; //dp[i - 1]
for(int i = 2;i <= s.length(); i++){
String temp = s.substring(i-2,i);
int c = temp.compareTo("10") >= 0 && temp.compareTo("25") <= 0 ? a + b : a;
b = a;
a = c;
}
return a;
}
}
4 提交结果