剑指offer-Day10
我们的目标是星辰大海,而非人间烟尘
剑指 Offer 46. 把数字翻译成字符串
给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”。一个数字可能有多个翻译。请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。
示例 1:
输入: 12258
输出: 5
解释: 12258有5种不同的翻译,分别是"bccfi", "bwfi", "bczi", "mcfi"和"mzi"
提示:
0 <= num < 231
解题思路:
根据题意,可按照下图的思路,总结出 “递推公式” (即转移方程)。
因此,此题可用动态规划解决,以下按照流程解题。
class Solution {
public:
int translateNum(int num) {
string str = to_string(num);
int len = str.size();
if(len <2)
return len;
vector<int> dp(len+1);
dp[0] = 1;dp[1]=1;
for(int i = 2 ;i<=len;i++){
if(str[i-2]=='1'||(str[i-2]=='2'&&str[i-1]<='5'))
dp[i] = dp[i-1]+dp[i-2];
else
dp[i]=dp[i-1];
}
return dp[len];
}
};