剑指 Offer 46. 把数字翻译成字符串

题目:给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”。一个数字可能有多个翻译。  中等

请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。

方法:动态规划  时间复杂度O(n)  空间复杂度O(1) 

 

 比对字符

def translateNum(self, num):
        """
        :type num: int
        :rtype: int
        """
        a = b = 1
        s = str(num)
        for i in range(2,len(s)+1):
            a,b = (a + b if '10' <= s[i-2:i] <= '25' else a),a
        return a

该题从前到后和从后往前结果一样,故取余法节省空间

def translateNum(num):
        """
        :type num: int
        :rtype: int
        """
        a,b = 1,1
        y = num % 10
        while num:
            num //= 10
            x = num % 10
            a,b = a + b if 10 <= x*10 + y  <= 25 else a,a
            y = x
        return a

 

 

posted @ 2022-08-07 11:44  Liang-ml  阅读(30)  评论(0)    收藏  举报