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]