面试题46:把数字翻译成字符串
给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”。一个数字可能有多个翻译。请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。
// 动态规划
class Solution {
public:
int translateNum(int num) {
string s = to_string(num);
if(s.size()<2)
return s.size();
int dp1=1,dp0=1; // dp[i]的值只与dp[i-1]的值有关,所以用两个变量分别记录dp[i]、dp[i-1],节省内存;
int temp;
for(int i=2;i<=s.size();i++)
{
if(s[i-2]=='1' || (s[i-2]=='2' && s[i-1]<='5'))
{
temp=dp1;
dp1=dp1+dp0;
dp0=temp;
}
else
dp0=dp1;
}
return dp1;
}
};