把数字翻译成字符串

给定一个数字,我们按照如下规则把它翻译为字符串: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()];
    }
};