剑指 Offer 46. 把数字翻译成字符串、
一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。
答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。
由于青蛙一次可以跳一格或者两格,所以到达当前状态的途径有两个:从前一个台阶跳过来或者从前数两个台阶跳过来,因此有关系:dp[i] = dp[i-1] + dp[i-2]
class Solution:
def numWays(self, n: int) -> int:
dp = [0] * n
if n == 0 or n==1:
return 1
dp[0] = 1
dp[1] = 2
for i in range(2,n):
dp[i] = dp[i-1] + dp[i-2]
return dp[n-1] % 1000000007
给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”。一个数字可能有多个翻译。请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。
class Solution:
def translateNum(self, num: int) -> int:
s = str(num)
dp = dict()
dp[0], dp[1] = 1, 1
a, b = 1, 1
for i in range(2,len(s)+1):
a, b = (a+b if '10' <= s[i-2:i] <= '25' else a), a
dp[i] = a
return dp[len(s)]
然后发现,用122432627258356这个例子测试的时候 出现了尴尬的事情,
数了一下感觉不是我的问题,然后提交通过了.