题解 | #把数字翻译成字符串#
把数字翻译成字符串
https://www.nowcoder.com/practice/046a55e6cd274cffb88fc32dba695668
动态规划:
注意0的情况就行,具体见注释。
(如果是把0翻译成a,就会少掉dp = dp[i-2]和直接return 0的情况。)
class Solution: def solve(self , nums: str) -> int: # 动态规划 dp = [0]*len(nums) # 0位初始化 dp[0] = 0 if nums[0] == '0' else 1 # 1位初始化 if len(nums) >= 2: if (nums[0] == '1' and nums[1] != '0') or (nums[0] == '2' and int(nums[1]) in range(1, 7)): dp[1] = 2 elif nums[1] == '0' and nums[0] in ['1', '2']: dp[1] = 1 elif nums[1] == '0': return 0 else: dp[1] = dp[0] # 从2循环 for i in range(2, len(nums)): # 11-19和21-26的情况,可以1单独翻译,也可以11一起翻译 if (nums[i - 1] == '1' and nums[i] != '0') or (nums[i - 1] == '2' and int(nums[i]) in range(1, 7)): dp[i] = dp[i -1] + dp[i - 2] # 10和20的情况,这时1和2只能往后和0配对,10一起翻译 elif nums[i] == '0' and nums[i - 1] in ['1', '2']: dp[i] = dp [i - 2] # 00、30、40、50...的情况,直接返回0 elif nums[i] == '0': return 0 # 01、18、28、31、41、51的情况,1只能单独翻译 else: dp[i] = dp[i - 1] return dp[len(nums) - 1]