思路动态规划: 首先联想到青蛙跳阶梯问题,可以一次跳两节,也可以一次跳一节。在本题中,可以一次翻译一个字符 可以一次翻译两个字符。 但是,当翻译两个字符时,会存在00 01 02 。。。09 以及>25的情况,此时,一次翻译两个字符就有问题,因此要分情况讨论。
建立状态转换方程:
class Solution {
public:
int translateNum(int num) {
string s = to_string(num);
int size = s.length();
if(size < 2) return size;//可加可不加
int dp[size+1];
dp[0] = 1;
dp[1] = 1;
for(int i = 2; i <= size; i++)
{
if(s[i-2] == '1' || (s[i-2] == '2' && s[i-1] <= '5')) dp[i] = dp[i-1] + dp[i-2];
else dp[i] = dp[i-1];
}
return dp[size];
}
};