【剑指offer】【递归】46. 把数字翻译成字符串

题目链接:https://leetcode-cn.com/problems/ba-shu-zi-fan-yi-cheng-zi-fu-chuan-lcof/

递归

class Solution {
public:
    int translateNum(int num) {
        if(num <= 9) return 1;
        int ba = num % 100;
        if(ba <= 9 || ba >= 26) return translateNum(num / 10);
        else return translateNum(num / 10) + translateNum(num / 100);
    }
};

动态规划

思路

2 <= i < len(str)
if str[i]和str[i-1]构成的数字 < 26:
    dp[i] = dp[i-1] + dp[i-2]   #等于前两项之和
else:
    dp[i] = dp[i-1]             #不受影响直接等于前一项
class Solution {
public:
    int translateNum(int num) {
        string str = to_string(num);
        int n = str.size();
        if(n == 1) return 1;

        vector<int> dp(n, 0);

        dp[0] = 1;
        if((str[0] - '0') * 10 + str[1] - '0' < 26) dp[1] = 2;
        else dp[1] = 1;

        for(int i = 2; i < n; i++)
        {
            if((str[i - 1] - '0') * 10 + str[i] - '0' < 26 && str[i - 1] != '0')
                dp[i] = dp[i - 1] + dp[i - 2];
            else
                dp[i] = dp[i - 1];
        }
        return dp[n - 1];
    }
};

参考链接:https://leetcode-cn.com/problems/ba-shu-zi-fan-yi-cheng-zi-fu-chuan-lcof/solution/zhao-gui-lu-dong-tai-gui-hua-by-zai-jian-xiao-long/

posted @ 2020-04-30 08:19  NaughtyCoder  阅读(105)  评论(0)    收藏  举报