"""
面试题46. 把数字翻译成字符串
给定一个数字,我们按照如下规则把它翻译为字符串
:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”。
一个数字可能有多个翻译。请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。
示例 1:
输入: 12258
输出: 5
解释: 12258有5种不同的翻译,分别是"bccfi", "bwfi", "bczi", "mcfi"和"mzi"
"""
class Solution:
def translateNum(self, num: int) -> int:
"""
动态规划
考虑第i位
可以看成i-1位与其单独相连 + i-2位 后两位与其相连
f(i) = f(i-1) + f(i-2)
:param num:
:return:
"""
src = str(num)
# 由于只涉及到三个变量,这里用滚动数组进一步优化空间复杂度
p, q, r = 0, 0, 1
for i in range(len(src)):
# 首先肯定是有f(i) = f(i-1)
p, q, r = q, r, 0
r += q
if i == 0:
continue
# 判断尾部两个连起来是否在10-25范围内,如果在则+f(i-2)
pre = src[i-1:i+1]
if pre <= "25" and pre >= "10":
r += p
return r
S = Solution()
a = S.translateNum(12258)
print(a)
剑指offer 46题 把数字翻译成字符串
最新推荐文章于 2023-02-25 09:17:40 发布