题解 | #把数字翻译成字符串#
把数字翻译成字符串
https://www.nowcoder.com/practice/046a55e6cd274cffb88fc32dba695668
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 解码
# @param nums string字符串 数字串
# @return int整型
#
class Solution:
def solve(self , nums: str) -> int:
if nums == '0':
return 0
if len(nums) == 1:
return 1
# write code here
dic = ['', 'a', 'b', 'c', 'd', 'e', 'f', 'g',
'h', 'i', 'j', 'k', 'l', 'm', 'n',
'o', 'p','q', 'r', 's','t',
'u','v','w','x','y','z'
]
# 每一位可能的结果都由一个数组保存
# 数组中第一位是存放当前数字没有和前一个数字一起组成一个两位数时总共的结果,
# 也就是第一位的结果中,当前位没有和前一位组成新的数字,因此当前位还有可能与下一位组成新的数字
# 数组中第二位是存放当前数字和前一个数字组成两位数时的结果
# 那么总的结果就是求和这个数组
res = {0: [1, 0]}
for i in range(1, len(nums)):
# 因为0没有对应的译码,它总是要和前一位组成一个二位数才能有译码
if nums[i] == '0':
if nums[i-1] == '0':
# 连续两个0,没有对应的译码,直接返回
return 0
if int(nums[i-1:i+1]) <= 20:
# 小于20时,前一位组成的整数就有对应的译码,且译码的结果数就是前一位的数组中的第一位
res[i] = [res[i-1][0], 0]
else:
# 和前一个数字组成的数大于20,也没有对应的译码
return 0
continue
if int(nums[i-1:i+1]) <= 26 and nums[i-1] != '0':
# 直接转移,数组中第一位是直接在前一位的所有结果后面加上当前数字对应的字母
# 第二位是当前位和前一位组成新数字对应的字母
res[i] = [sum(res[i-1]), res[i-1][0]]
else:
res[i] = [sum(res[i-1]), 0]
return sum(res[len(nums)-1])
查看21道真题和解析