剑指 Offer 46. 把数字翻译成字符串
题目描述
给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”。一个数字可能有多个翻译。请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法
动态规划:
class Solution:
def translateNum(self, num: int) -> int:
s = str(num)
# a = f[0], b = f[1]
a = b = 1
for i in range(2, len(s) + 1):
# f[n] = f[n - 1], f[n + 1] = f[n] or f[n] + f[n - 1]
a, b = b, (a + b if '10' <= s[i - 2: i] <= '25' else b)
return b
节省存储空间,从后往前遍历:
class Solution:
def translateNum(self, num: int) -> int:
a = b = 1
y = num % 10
while num:
num //= 10
x = num % 10
b, a = a, a + b if 10 <= (10 * x + y) <= 25 else a
y = x
return a