算法1
(动态规划) $O(n)$
类比爬楼梯,dp[n] = dp[n-1]+dp[n-2],dp[n]代表走到最后一个字符,能有多少多少中翻译方法
对于访问到当前的字符dp[n],能有多少中翻译?(1)当前字符翻译为1个字符这是一种方法,dp[n] = dp[n-1] (2) 当前字符呵前一个字符共同翻译为一种方法 dp[n]+=dp[n-2],此时的条件为前后两个字符可以翻译为同一个字符。还有 04,05,06,这种只能翻译为1中,其组合不能作为一种翻译。
时间复杂度分析:blablabla
C++ 代码
class Solution {
public:
int getTranslationCount(string s) {
if(s.empty()) return 0;
int len = s.size();
int dp[len+1];
memset(dp,0,sizeof(dp));
dp[0] = 1;
dp[1] = 1;
for (int i=2;i<=len;i++){
dp[i] = dp[i-1];
int k = s[i-1] - '0';
int k1 = s[i-2] - '0';
if (k1 * 10 + k <= 25 && k1 != 0){
dp[i] += dp[i-2];
}
}
return dp[len];
}
};