本文最后更新于:2020年11月16日 下午
一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个$n$级的台阶总共有多少种跳法。
答案需要取模$1e9+7(1000000007)$,如计算初始结果为:1000000008,请返回1。
示例1:
输入:n = 2
输出:2
示例2:
输入:n = 7
输出:21
示例3:
输入:n = 0
输出:1
提示:
- 0 <= n <= 100
注意:本题与主站70题相同。
class Solution:
def numWays(self, n):
解题思路:
设跳上$n$级台阶有$f(n)$种跳法。在所有跳法中,青蛙的最后一步只有两种情况,跳上1级或2级台阶。
- 当为1级台阶:剩n-1个台阶,此情况共有$f(n-1)$种跳法;
- 当为2级台阶:剩n-2个台阶,此情况共有$f(n-2)$种跳法。
即$f(n)$为以上两种情况之和,即$f(n)=f(n-1)+f(n-2)$,以上递推性质为斐波那契数列。因此,本题可转化为求斐波那契数列第n项的值,唯一不同在于起始数字不同。
- 青蛙跳台阶问题: $f(0)=1,f(1)=1,f(2)=2$;
- 斐波那契数列问题:$f(0)=0,f(1)=1,f(2)=1$。
class Solution:
def numWays(self, n):
a, b = 1, 1
for _ in range(n):
a, b = b, (a+b)%1000000007
return a
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!