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)]

你可能感兴趣的:(leetcode91 解码方法 python)