DP-LeetCode91. 解码方法

1、题目描述

2、代码详解

O(n)

class Solution(object):
    def numDecodings(self, s):
        """
        :type s: str
        :rtype: int
        """
        # 空串时,或字符串以 '0' 开头(非法), 则直接返回0
        if s == '' or s[0] == '0':
            return 0
        n = len(s)
        dp = [0 for _ in range(n+1)]  # dp[i] 表示以第i个数字结尾的解码方式有多少种,注意第i个数字的下标为i - 1
        dp[0] = 1  # 初始条件:空串1种方式解密,不能为0
        dp[1] = 1  # 长度1的s,1种方式解码
        for i in range(2, n+1):
            if '1' <= s[i-1] <= '9':
                dp[i] += dp[i-1]  # += 前i-1个数字解密的方式树
            if '10' <= s[i-2:i] <= '26':
                dp[i] += dp[i-2]  # += 前i-2个数字解密的方式树
        return dp[-1]
ss = '12'
s = Solution()
print(s.numDecodings(ss))

参考九章动态规划视频

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值