题目:
给定一个数字,按照如下规则翻译成字符串:0翻译成“a”,1翻译成“b”…25翻译成“z”。一个数字有多种翻译可能,例如12258一共有5种,分别是bccfi,bwfi,bczi,mcfi,mzi。实现一个函数,用来计算一个数字有多少种不同的翻译方法。
代码:
int Get_Translation(int num)
{
string str = to_string(num);
int digits = str.length();
vector<int> dp(digits+1);
dp[0] = 1;
dp[1] = 1;
for(int i = 2; i < digits+1; ++i)
{
int temp = 10 * (str[i-2] - '0') + str[i-1] - '0';
if (temp > 25)
dp[i] = dp[i - 1];
else
{
dp[i] = dp[i - 1] + dp[i - 2];
}
}
return dp.back();
}
解析:
这道题可以用动态规划做
str | str[0] | str[1] | …… | str[i-1] | …… | str[len-1] | |
---|---|---|---|---|---|---|---|
dp | dp[0] | dp[1] | dp[2] | …… | dp[i] | …… | dp[len] |
dp[i]表示从str[0]到str[i-1]一共有多少种翻译。
这道题和斐波那契系列问题有点类似。