剑指 Offer 10- II. 青蛙跳台阶问题
说明
一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。
答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。
示例
输入:n = 2
输出:2
输入:n = 7
输出:21
输入:n = 0
输出:1
题解思路
设跳n个台阶有f(n)种跳法
分析题意可得,最后一步有两种情况:跳一个台阶或跳两个台阶
1、跳一个台阶,那么剩下n-1个台阶,那么就有f(n-1)种跳法
2、跳两个台阶,那么剩下n-2个台阶,那么就有f(n-2)种跳法
由此看来,该题是斐波那契数列问题,只是f0和f1不同
代码实现
class Solution(object):
def numWays(self, n):
"""
:type n: int
:rtype: int
"""
f0 = 1
f1 = 1
fn = 1
if n < 2:
return 1 % 1000000007
for _ in range(2, n+1):
fn = f0 + f1
f0 = f1
f1 = fn
return fn % 1000000007