LeetCode 46. 把数字翻译成字符串 [Python]

问题

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

示例 1:

输入: 12258
输出: 5
解释: 12258有5种不同的翻译,分别是"bccfi", “bwfi”, “bczi”, “mcfi"和"mzi”

思路

运用递归知识求解。

(1)首先获取数字,判断数字字符串的长度,按照字符串的顺序依次判断,好比第一个数字进栈,然后依次有数字进栈。其中,有两种判定结果:长度为1,长度为2且数字小于等于25。当满足条件时计数count++,直到所有判断都结束。
(2) 要注意“int(a2[0]) != 0” 长度为2时,第一个数字不能使0.

代码

class Solution:
    def translateNum(self, num):
        self.count = 0
        self.num = str(num)
        self.fun(self.num)
        return self.count

    def fun(self, num):
        if len(num) >= 1: #长度大于1
            a1 = num[0]
            b1 = num[1:]
            if len(num[1:]) >= 2:
                self.fun(b1)
            else:
                self.count += 1

        if len(num) >= 2: #长度大于2
            a2 = num[0:2]
            b2 = num[2:]
            if (int(a2) <= 25) & (int(a2[0]) != 0):
                if len(num[2:]) >=2:
                    self.fun(b2)
                else:
                    self.count += 1

if __name__ == '__main__':
    s = Solution()
    r = s.translateNum(11345)
    print(r)
相关知识

栈、递归

猜你喜欢

转载自blog.csdn.net/qq_41709378/article/details/106653591