[剑指offer 10-II] 青蛙跳台阶问题

剑指offer 10-II 青蛙跳台阶问题

问题描述: 一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。

答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。

算法分析:

递推问题,类似于斐波那契数列。设f(n)为跳到第n个台阶可能的跳法数。对于最后一跳,要么跳一步,要么跳两步,只有这两种可能。如果最后跳一步,那么该跳之前就有f(n-1)种跳法;如果跳两步,则最后一跳之前有f(n-2)种跳法,故总的跳法数为f(n)=f(n-1)+f(n-2)

代码实现1:动态规划

转移方程:f(n)=f(n-1)+f(n-2)

#python
#最后一跳,要么跳一步,要么跳两步,最后都得跳,f(n)=f(n-1)+f(n-2)实际上就考虑了最后一跳这个过程
#例如n=3
#最后跳一步f(n-1):
#1,1,1
#2,1
#最后跳两步f(n-2)
#1,2
class Solution:
    def numWays(self, n: int) -> int:
        a = 1
        b = 1
        for i in range(n):
            a,b = b,a+b
        return a%100000007 

代码实现2:设置一个数组直接计算

设置一个数组保存数列,初始化前两个元素,则后面的元素都可以递推算得

#python
class Solution:
    def numWays(self, n: int) -> int:
        if n == 0 or n == 1:return 1
        lst = [1,1]
        for i in range(2,n+1):
            lst.append(lst[i-1]+lst[i-2])
        return lst[n]%1000000007
上一篇:python基本功


下一篇:python爬虫第十一讲-阶段复习