"""
题目:给定一个数字,我们按照如下规则把它翻译为字符串:0翻译成“a”,1翻译成“b”,……,11翻译成“l(大写L)”,……,25翻译为
“z”。一个数字可能有多少个翻译。例如,12258有5种不同的翻译,分别是“bccfi”,“bwfi”,“bczi”,“mcfi”,“mzi”。
"""
# 这道题目的解法是动态规划
class Solution:
def function(self, n):
if n < 0:
return 0
# 现将n转化为字符串
string = str(n)
return self.core(string)
def core(self, string):
string_length = len(string)
if string_length == 1:
return 1
if string_length == 2:
if 10 <= int(string[0]+string[1]) <= 25:
return 2
else:
return 1
array = [0 for i in range(string_length)]
array[0] = 1
if 10 <= int(string[0] + string[1]) <= 25:
array[1] = 2
else:
array[1] = 1
for i in range(2, string_length):
converted = int(string[i-1]+string[i])
if 10 <= converted <= 25:
array[i] = array[i-2]+array[i-1] # 这个是动态规划的重点
else:
array[i] = array[i-1]
return array[string_length-1]
if __name__ == '__main__':
s = Solution()
print(s.function(12258))
剑指offer:046把数字翻译成字符串
最新推荐文章于 2020-12-13 15:29:07 发布