题目描述:给定一个数字,我们按照如下规则把它翻译为字符串:
0 翻译成
a
,1 翻译成b
,……,11 翻译成l
,……,25 翻译成z
。一个数字可能有多个翻译。
例如 12258 有 5 种不同的翻译,它们分别是
bccfi
、bwfi
、bczi
、mcfi
和mzi
。请编程实现一个函数用来计算一个数字有多少种不同的翻译方法。
样例
输入:"12258"
输出:5
分析:根据我们将要处理的那个字符(第i个字符,记为x)的处理方式分情况讨论,类似对最后一步操作做分情况讨论
1、如果我们将x单独翻译 那么
dp[i]=dp[i-1]
2、如果我们将x和前一字符合并翻译处理 那么
dp[i] = dp[i-2]
dp[i] = dp[i-1] + dp[i-2]
附:该题类似于爬楼梯问题、斐波那契......
代码如下:
class Solution {
public:
int getTranslationCount(string s) {
int dp[s.size()];
if(s.size() == 0 || s.size() == 1) return s.size();
s = " " + s;
dp[0] = 1;
for(int i=1;i<s.size();i++){
dp[i] = dp[i-1];
if(i > 1){
int t = ( s[i] - '0' ) + ( s[i-1] - '0' ) * 10;
if(t >= 10 && t <= 25) dp[i] += dp[i-2];
}
}
return dp[s.size()-1];
}
};