给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”。一个数字可能有多个翻译。请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。
示例 1:
输入: 12258
输出: 5
解释: 12258有5种不同的翻译,分别是"bccfi", "bwfi", "bczi", "mcfi"和"mzi"
提示:
0 <= num < 2^31
class Solution {
int record[100] = { 0 };
int result = 0;
string S;
int Str2int(char d[2])
{
return((d[0] - '0') * 10 + d[1] - '0');
}
int DFS(int num)
{
cout << num << endl;
if (record[num] > 0)
{
return record[num];
}
if (num < S.length() - 1)
{
char n[2];
int sum = 0;
n[0] = S[num];
n[1] = S[num + 1];
int number = Str2int(n);
if (number < 26 && S[num] != '0')
sum += DFS(num + 2);
sum += DFS(num + 1);
record[num] = sum;
return sum;
}
else
return 1;
}
public:
int translateNum(int num) {
S = to_string(num);
return DFS(0);
}
};