解题思路: 动态规划 1.dp[i]定义 字符串 nums[0-i] 的可能的译码结果 2.状态转移方程 (i>=2) (a)后两个字符11-19,21-26时,dp[i] = dp[i-1] + dp[i-2] (b)当前字符1-9时,后两个字符10或20时,dp[i] = dp[i-1] (c)其它情况 dp[i] = 0 3.边界 (i==0) 首字符1-9时,dp[0] = 1 首字符为0时,dp[0] = 0,直接返回 (i==1) (a)后两个字符11-19,21-26时,dp[i] = 2 (b)当前字符1-9时,后两个字符10或20时,dp[i] = 1 (c)其它情况 dp[i] = 0 #============================================================================================= ''' # # 解码 # @param nums string字符串 数字串 # @return int整型 # class Solution: def solve(self , nums ): # write code here n = len(nums) #print('nums=',nums) #print('n=',n) if n==0: return 0 dp = [0]*n for i in range(n): if i==0: if 1<=int(nums[i])<=9: dp[i] = 1 else: dp[i] = 0 return 0 elif i==1: if 11<=int(nums[i-1:i+1])<=19 or 21<=int(nums[i-1:i+1])<=26: dp[i] = 2 elif 1<=int(nums[i])<=9 or int(nums[i-1:i+1])==10 or int(nums[i-1:i+1])==20: dp[i] = 1 else: dp[i] = 0 else: if 11<=int(nums[i-1:i+1])<=19 or 21<=int(nums[i-1:i+1])<=26: dp[i] = dp[i-1] + dp[i-2] elif 1<=int(nums[i])<=9 or int(nums[i-1:i+1])==10 or int(nums[i-1:i+1])==20: dp[i] = dp[i-1] else: dp[i] = 0 #print(dp) return dp[-1] print(Solution().solve('31717126241541717')) # 192