[Python]lintcode 512. 解码方法 有一个消息包含A-Z通过以下规则编码 ‘A‘ -> 1 ‘B‘ -> 2 ... ‘Z‘ -> 26

512. 解码方法

有一个消息包含A-Z通过以下规则编码’A’ -> 1’B’ -> 2…Z’ -> 26现在给你一个加密过后的消息,问有几种解码的方式

代码

def numDecodings(self, s):
    ss=len(s)
    if(ss==0):
        return 0
    dp = [[0] for i in range(ss+1)]
    dp[0]=1
    for i in range (1,ss+1,1):
        dp[i]=0  
        if i>=1:
            t=int(s[i-1])-int('0')
            if t>=1 and t<=9:
                dp[i]=dp[i]+dp[i-1]
        if i>=2:
            t=(int(s[i-2])-int('0'))*10+(int(s[i-1])-int('0'))
            if t>=10 and t<=26:
                dp[i]=dp[i]+dp[i-2]
                
    
    
    return dp[ss]

想法

状态转移方程:从后面来看,要得到前len(s)个数的解,就必须得到前len(s)-1 与len(s)-2的结果,因为其结果来源是这两种方式(范围为1-26).
t=int(s[i-1])-int(‘0’),之所以用‘0’,而不是0,这是由于ASCII码的原因。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值