给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”。一个数字可能有多个翻译。请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。
思路:
记dp[i],表示num[0...i]的翻译方法。则有dp[i]=dp[i-1]+x*dp[i-2],x表示num[i-2...i]是否大于等于10,小于等于25。如果是,则x=1,否则x=0。dp[0]=1
代码:
class Solution {
public:
int translateNum(int num) {
if(num < 0) {
return 0;
}
if(num == 0) return 1;
vector<int> nums;
while(num>0) {
nums.push_back(num%10);
num /= 10;
}
int left = 0;
int right = nums.size()-1;
while(left < right) {
swap(nums[left],nums[right]);
left++;
right--;
}
vector<int> dp(nums.size()+1);
dp[0] = 1;
for(int i = 1;i <= nums.size();i++) {
dp[i] = dp[i-1];
if(i > 1 && nums[i-2]*10+nums[i-1] <= 25 && nums[i-2]*10+nums[i-1] >= 10) {
dp[i] += dp[i-2];
}
}
return dp[nums.size()];
}
};