剑指Offer 2. 青蛙跳台阶问题
题目描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。
答案需要取模1e9+7(1000000007),如计算初始结果为:1000000008,请返回1
解题思路
类比于斐波那契数列的解法
f(x) 表示到x级台阶的方法数, 最后一步只能是一步或者两步,所以可以列出如下表达式
f(x) = f(x - 1) + f(x - 2)
当台阶只有一级的时候f(1) = 1, 显然f(0) = 0
所以我们可以用上面的递推式求出n级台阶的方法数
代码实现
func numWays(n int) int {
pre, cur, res := 0, 0, 1
for i := 1; i <= n; i++ {
pre = cur
cur = res
pre, cur= pre % (1e9 + 7), cur % (1e9 + 7)
res = pre + cur
res= res % (1e9 + 7)
}
return res
}