剑指 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

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/qing-wa-tiao-tai-jie-wen-ti-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。


记忆数组

在这里插入图片描述

class Solution {
    
    
    public int numWays(int n) {
    
    
            int[] end=new int[n+2];
            end[0]=1;
            end[1]=1;
            for(int i=2;i<=n;++i){
    
    
                end[i]=(end[i-1]+end[i-2])%1000000007;
            }
            return end[n];
    }
}

记忆动态优化

不记忆的话会超时
在这里插入图片描述

class Solution {
    
    
    private static int[] nums ;
    public int numWays(int n) {
    
    
        nums = new int[n + 1];
        int[] nums = new int[n + 1];
        return fun(n);
    }

    public static int fun(int num) {
    
    
        if (num >= 2) {
    
    
            if (nums[num] == 0) {
    
    
                nums[num] = (fun(num - 1) + fun(num - 2))%1000000007;
            }
            return nums[num];
        } else {
    
    
            return 1;
        }

    }



}

猜你喜欢

转载自blog.csdn.net/qq_44627608/article/details/124682591