题解 | #把数字翻译成字符串#

把数字翻译成字符串

https://www.nowcoder.com/practice/046a55e6cd274cffb88fc32dba695668

#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 解码
# @param nums string字符串 数字串
# @return int整型
#
class Solution:
    def solve(self , nums: str) -> int:
        if nums == '0':
            return 0
        if len(nums) == 1:
            return 1
        # write code here
        dic = ['', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 
            'h', 'i', 'j', 'k', 'l', 'm', 'n', 
            'o', 'p','q', 'r', 's','t',
            'u','v','w','x','y','z'
        ]
        # 每一位可能的结果都由一个数组保存
        # 数组中第一位是存放当前数字没有和前一个数字一起组成一个两位数时总共的结果,
        # 也就是第一位的结果中,当前位没有和前一位组成新的数字,因此当前位还有可能与下一位组成新的数字
        # 数组中第二位是存放当前数字和前一个数字组成两位数时的结果
        # 那么总的结果就是求和这个数组
        res = {0: [1, 0]}
        for i in range(1, len(nums)):
            # 因为0没有对应的译码,它总是要和前一位组成一个二位数才能有译码
            if nums[i] == '0':
                if nums[i-1] == '0':
                    # 连续两个0,没有对应的译码,直接返回
                    return 0
                if int(nums[i-1:i+1]) <= 20:
                    # 小于20时,前一位组成的整数就有对应的译码,且译码的结果数就是前一位的数组中的第一位
                    res[i] = [res[i-1][0], 0]
                else:
                    # 和前一个数字组成的数大于20,也没有对应的译码
                    return 0
                continue
            if int(nums[i-1:i+1]) <= 26 and nums[i-1] != '0':
                # 直接转移,数组中第一位是直接在前一位的所有结果后面加上当前数字对应的字母
                # 第二位是当前位和前一位组成新数字对应的字母
                res[i] = [sum(res[i-1]), res[i-1][0]]
            else:
                res[i] = [sum(res[i-1]), 0]
        
        return sum(res[len(nums)-1])

全部评论

相关推荐

03-02 08:18
集美大学 Java
钱嘛数字而已:没有赛事奖项么?另外,项目经历字有点多哈,建议突出一下重点:用的什么技术,解决什么问题,达到什么效果。
大家都开始春招面试了吗
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务