class Solution:
    def numDecodings(self , s ):
        # write code here
        if s == '' or s[0] == '0':
            return 0
        dp = [1]*(len(s) + 1)
        dp[1] = 1
        for i in range(1,len(s)):
            count = 0
            if s[i - 1] != '0' and int(s[i - 1:i + 1]) <= 26:
                count += dp[i - 1]
            if s[i] != '0':
                count += dp[i]
            dp[i + 1] = count
        return dp[-1]

时间复杂度O(n)

空间复杂度O(n)

使用方法:动态规划记忆化搜索