当后两位不能一起翻译时,最后一位只能自己翻译,因此最后一位只有一种翻译方法
当两位可以一起翻译的时候,最后一位可以自己翻译,也可以和上一位一起
一旦前面的i-1或者i-2位确定了后面也确定了,因此不是+1
字符串遍历
class Solution:
def translateNum(self, num: int) -> int:
s = str(num)
a = b = 1
for i in range(2, len(s) + 1):
a, b = (a + b if "10" <= s[i - 2:i] <= "25" else a), a
return a
数字求余
避免使用数字转字符串占用O(n)空间
直接使用Num进行运算
- 使用取余%和取整//运算 不断得到最后一位和倒数第二位
- 从尾部前溯和从头部开始是对称的 过程相同
class Solution:
def translateNum(self, num: int) -> int:
a = b = 1
y = num % 10 #获取最后一位
while num > 9:
num //= 10 # 去除最后一位
x = num % 10 #或许去除最后一位后的新的最后一位即倒数第二位
a, b = (a + b if 10 <= 10 * x + y <= 25 else a), a
y = x
return a