本文最后更新于: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. 当为1级台阶:剩n-1个台阶,此情况共有$f(n-1)$种跳法;
  2. 当为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