剑指 Offer 10- II. 青蛙跳台阶问题

一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。

答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。

示例 1:

输入:n = 2
输出:2

示例 2:

输入:n = 7
输出:21

示例 3:

输入:n = 0
输出:1

提示:

  • 0 <= n <= 100

递归肯定过不了吧,不写了。

法一:基本dp

class Solution {
public:
    int numWays(int n) {
        int f[101] = {0};
        f[0] = 1;
        f[1] = 1;
        f[2] = 2;
        for(int i=3; i<=n; i++){
            f[i] = (f[i-1]+f[i-2])%(int)(1e9+7);
        }
        return f[n];
    }
};

法二: 滚动数组优化

class Solution {
public:
    int numWays(int n) {
        int first = 1, second = 1;
        for(int i=2; i<=n; i++){
            int tmp = second;
            second = (first+second)%(int)(1e9+7);
            first = tmp;
        }
        return second;
    }
};

 

 

posted @ 2021-06-23 22:24  深圳地铁Princess  阅读(36)  评论(0编辑  收藏  举报