把数字翻译成字符串
题目
给定一个数字,我们按照如下规则把它翻译为字符串:
0翻译成”a”,1翻译成”b”,……,11翻译成”l”,……,25翻译成”z”。
一个数字可能有多个翻译。例如12258有5种不同的翻译,它们分别是”bccfi”、”bwfi”、”bczi”、”mcfi”和”mzi”。
请编程实现一个函数用来计算一个数字有多少种不同的翻译方法。
样例
输入:“12258”
输出:5
题解
状态表示
- f [ i ] 表示到第 i 个字符为止的字符串的方法个数
状态转移方程
- 当前字符为一个字符时,f [n] = f [n - 1]
- 当前字符和前一个字符共同翻译为一个字符时,f [n] += f [n - 2]
注意
- 两个字符组成数字要在10到25之间
class Solution {
public:
int getTranslationCount(string s) {
int n = s.size(), sum = 0;
vector<int> f(n + 1);
f[0] = 1;
for (int i = 1; i <= n; i ++) {
f[i] = f[i - 1];
if (i > 1) sum = (s[i - 2] - '0') * 10 + s[i - 1] - '0';
if (sum >= 10 && sum <= 25) f[i] += f[i - 2];
}
return f[n];
}
};