剑指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
}
posted @ 2020-08-19 19:21  醉曦  阅读(230)  评论(0编辑  收藏  举报