class Solution:
    def solve(self , nums: str) -> int:
        l = len(nums)
        dp = [1 for _ in range(l+1)]
        for i in range(1, l+1):
            if i == 1:
                # 如果第一个数字是0,不存在可行的翻译
                if nums[i-1] == '0':
                    return 0
            else:
                # 任何一个’0‘,都依赖于其前面一个数字,先讨论当前数字为0的情况
                if nums[i-1] == '0':
                    # 如果当前0不能和前一个数字组合
                    if (int(nums[i-2]) > 2 or nums[i-2] == '0'):
                        return 0
                    # 当前0和前一个数字组合
                    else:
                        dp[i] = dp[i-2]
                # 再讨论当前数字不为0的情况
                else:
                    # 如果当前数字不能和前一个数字组合
                    if nums[i-2] == '0' or int(nums[i-2]+nums[i-1]) > 26:
                        dp[i] = dp[i-1]
                    # 当前数字和前一个数字组合或者不组合
                    else:
                        dp[i] = dp[i-2] + dp[i-1]    
        return dp[-1]