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

把数字翻译成字符串

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

动态规划:
注意0的情况就行,具体见注释。
(如果是把0翻译成a,就会少掉dp = dp[i-2]和直接return 0的情况。)
class Solution:
    def solve(self , nums: str) -> int:
        # 动态规划
        dp = [0]*len(nums)
        
        # 0位初始化
        dp[0] = 0 if nums[0] == '0' else 1

        # 1位初始化
        if len(nums) >= 2:
            if (nums[0] == '1' and nums[1] != '0') or (nums[0] == '2' and int(nums[1]) in range(1, 7)):
                dp[1] = 2
            elif nums[1] == '0' and nums[0] in ['1', '2']:
                dp[1] = 1
            elif nums[1] == '0':
                return 0
            else:
                dp[1] = dp[0]

        # 从2循环
        for i in range(2, len(nums)):
            # 11-19和21-26的情况,可以1单独翻译,也可以11一起翻译
            if (nums[i - 1] == '1' and nums[i] != '0') or (nums[i - 1] == '2' and int(nums[i]) in range(1, 7)):
                dp[i] = dp[i -1] + dp[i - 2]
            # 10和20的情况,这时1和2只能往后和0配对,10一起翻译
            elif nums[i] == '0' and nums[i - 1] in ['1', '2']:
                dp[i] = dp [i - 2]
            # 00、30、40、50...的情况,直接返回0
            elif nums[i] == '0':
                return 0
            # 01、18、28、31、41、51的情况,1只能单独翻译
            else:
                dp[i] = dp[i - 1]

        return dp[len(nums) - 1]


全部评论

相关推荐

03-11 21:46
西北大学 Java
河和静子:这只是实习工资,我学长北大通班博一的,他同学被这家天天发邮件让他去实习,一个月10w
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务