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

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

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

示例 1:

输入:n = 2
输出:2

示例 2:

输入:n = 7
输出:21

示例 3:

输入:n = 0
输出:1

解:

动态规划:

设想 青蛙要跳到x阶,那么他的上一步动作 要么是 上1个台阶   要么是上2个台阶 ,所以他可以从 x-1或x-2 这两个位置到达x阶,那么到达x阶的方式就有:f(x) = f(x-1)+f(x-2) 所以本题就可以转化为求斐波那契数列第 n 项的值。

class Solution {
    public int numWays(int n) {
        int a = 1,b = 1,sum = 0;
        for(int i =0 ; i <n ;i++){
            sum = (a+b) % 1000000007;
            a = b;
            b = sum ;
        }
        return a;
    }
}

本题还可使用 递归和记忆递归 ,但是没有动态规划好用0-0

 

posted @ 2020-12-19 10:28  Tab_to  阅读(76)  评论(0)    收藏  举报