leetcode91 解码方法 python

解码方法

一条包含字母 A-Z 的消息通过以下方式进行了编码:'A' -> 1 'B' -> 2... 'Z' -> 26

给定一个只包含数字的非空字符串,请计算解码方法的总数。

示例 1: 输入: "12" 输出: 2

解释: 它可以解码为 "AB"(1 2)或者 "L"(12)。

示例 2: 输入: "226" 输出: 3

解释: 它可以解码为 "BZ" (2 26), "VF" (22 6), 或者 "BBF" (2 2 6) 。

 

def numDecodings(self, s):

        dp=[0]*(len(s)+1)                 #dp[0,1,2......n],len=n

        if len(s)==0 or s[0]=='0':        #边界情况(特殊情况)

            return 0

        dp[0]=1                          

        dp[1]=1

        for i in range(2,len(s)+1):

            if s[i-1]>'0':                   #若s[i-1]不为0,则s[i-1]可单独存在,s[i]可由s[i-1]走1步到达

                dp[i]=dp[i-1]

            if s[i-2]=='1' or (s[i-2]=='2' and s[i-1]<='6') : #承接上面,若s[i-2]*10+s[i-1]<=26,则s[i]可由s[i-2]走2步到达

                dp[i]+=dp[i-2]

        return dp[len(s)]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值