- 题目描述
给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成
“l”,……,25 翻译成 “z”。一个数字可能有多个翻译。请编程实现一个函数,用来计算一个数字有多少种不
同的翻译方法。
- 题解
动态规划
- 代码
class Solution {
public:
int translateNum(int num) {
if (num<0) return 0;
string str=to_string(num);
int n=str.size();
vector<int> dp(n+1,0);
dp[0]=dp[1]=1;
for (int i=2;i<=n;i++){
if (str[i-2]=='1'||(str[i-2]=='2'&&str[i-1]<'6')) dp[i]=dp[i-1]+dp[i-2];
else dp[i]=dp[i-1];
}
return dp[n];
}
};
class Solution {
public:
int translateNum(int num) {
if (num<0) return 0;
string str=to_string(num);
int n=str.size();
int p=1,q=1;
for (int i=2;i<=n;i++){
int t=q;
if (str[i-2]=='1'||(str[i-2]=='2'&&str[i-1]<'6')) q=p+q;
p=t;
}
return q;
}
};
class Solution {
public:
int translateNum(int num) {
if (num<0) return 0;
int p=1,q=1,a,b;
while(num/10){
a=num%10;
num/=10;
b=num%10;
int t=q;
if ((b*10+a)<=25&&(b*10+a)>=10) q=p+q;
p=t;
}
return q;
}
};