思路:动态规划,i + 1位存储i字符

例如:1223

1 - (1) 1种

12 - (1、2),(12) 2种

122 - (1、2、2),(12、2),(1、22) 3种

1223 - (1、2、2、3),(12、2、3),(1、22、3),(1、2、23),(12、23) 5种

以12【2】3的【2】为例,相当于12的各种翻译方法后面加2,与12的可翻译个数相同,再看22,相当于1的可翻译个数后面加22,与1的可翻译个数相同,则122的可翻译个数 = 12的可翻译个数 + 1的可翻译个数

若干i位满足可翻译,i-1 - i位满足可翻译,则: i的可翻译个数 = i-1的可翻译个数 + i-2的可翻译个数

细节:用dp[i]判断nums[i-1]位的可翻译情况

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