这个题本身不难,状态转移方程也好写,主要麻烦的是0的存在。
设dp[i]为到第i个字符为止的数组共有多少中译码方式,于是状态转移方程如下:
然后在注意下特殊情况,即100这种特殊的就行了,初始条件注意下就没问题了,代码如下:
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 解码
# @param nums string字符串 数字串
# @return int整型
#
class Solution:
def solve(self , nums: str) -> int:
# write code here
# 将nums中的不是1-9的字符全部删除
# 初始化list存储dp
if nums=='0':
return 0
leng = len(nums)
if leng == 0:
return 0
dp = [1]*leng
if leng == 1:
return 1
if int(nums[0:2])>26 or int(nums[0:2])==10:
dp[1] = 1
else:
dp[1] = 2
if leng == 2:
return dp[1]
if int(nums)%10 == 0:
return 0
else:
for i in range(2 , leng):
if int(nums[i-1:i+1])>26 or nums[i] == '0' or nums[i-1]=='0':
dp[i] = dp[i-1]
else:
dp[i] = dp[i-1]+dp[i-2]
return dp[-1]
nums = "31717126241541717"
print(Solution().solve(nums))