思路:动态规划,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]