把数字翻译成字符串

题目

  给定一个数字,按照如下规则翻译成字符串:0翻译成“a”,1翻译成“b”...25翻译成“z”。一个数字有多种翻译可能,例如12258一共有5种,分别是bccfi,bwfi,bczi,mcfi,mzi。实现一个函数,用来计算一个数字有多少种不同的翻译方法。

class Solution {
public:
    int translateNum(int num) {
        if  (num < 0) {
            return 0;
        }
    
        string num_of_str = to_string(num);
        int len = num_of_str.length();

        //表示num[0...i] 以i结尾的能够翻译的字符种类数
        vector<int> dp(len, 0);
        dp[0] = 1;//1个字符肯定能够翻译
        for (int i = 1; i < len; ++i) {
            dp[i] = dp[i - 1];//当前位置字符直接翻译 
            int num1 = num_of_str[i - 1] - '0';
            int num2 = num_of_str[i] - '0';
            if (num1 * 10 + num2 >= 10 && num1 * 10 + num2 <= 25) {
                if (i - 2 < 0) {
                    dp[i] += 1;
                }
                else {
                    dp[i] += dp[i - 2];
                }
            }
        }
        return dp[len - 1];
    }
};