剑指offer- python实现

面试题46:把数字翻译成字符串

2020-03-26  本文已影响0人  不会编程的程序猿甲

题目:
给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”。一个数字可能有多个翻译。请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。

思路:
本道题目用到自下而上的递归,动态规划的思想,从右向左得出能翻译的可能性,具体的思路如下:

46 把数字翻译成字符串.png

代码实现:

class Solution:
    def getTranslationCount(self, number):
        """
        :type number: int
        :rtype: int
        """
        if number < 0:
            return None

        str_number =  str(number)
        length = len(str_number)
        counts = [0]*length
        count = 0               #临时变量

        for i in range(length-1,-1,-1):  #从右到左遍历、
            # 先给count赋值上一次遍历的结果
            if i < length-1:
                count = counts[i+1]
            else:
                count = 1

            #实现递归公式f(r) = f(r+1) + g(r,r+1)f(r+2)
            if i < length-1:
                digit1 = int(str_number[i])
                digit2 = int(str_number[i+1])
                digit = 10*digit1 + digit2
                if digit >=10 and digit <=25:
                    if i < length -2:   #倒数第二位之前
                        count += counts[i+2]
                    else:
                        count +=1

            counts[i] = count   #将结果赋值给当前索引的counts列表
        return counts[0]

提交结果:

leetcode结果
上一篇下一篇

猜你喜欢

热点阅读