day03-II. 青蛙跳台阶问题

179 阅读1分钟

II. 青蛙跳台阶问题

题目描述:

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

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

示例:

输入: n = 2
输出: 2
输入: n = 7
输出: 21

解法

//  递归  青蛙到答某个台阶有两种方法 要么从前一个台阶跳一步上来 要么从前两个台阶跳两不上来--会超时
var numWays = function(n) {
    if(n===0){
        return 1;
    }else if(n===1){
        return 1
    }else {
        return numWays(n-1)+numWays(n-2)
    }
};

//动态规划  利用数组缓存每一次的结果
var numWays = function(n) {
    if(n===0){
        return 1;
    }else if(n===1){
        return 1
    }else {
        let res=[1,1];
        for(let i=2;i<=n;i++){
            res.push((res[i-1]+res[i-2])%1000000007)
        }
        return res[n];
    }
};

//动态规划 去掉数组  用基本数据类型缓存前两次的结果
var numWays = function(n) {
    if(n===0){
        return 1;
    }else if(n===1){
        return 1
    }else {
       let prev=1,prevT=1;
       for(let i=2;i<=n;i++){
           let temp=(prev+prevT)%1000000007
           prevT=prev;
           prev=temp;
       }
       return prev;
    }
};

感悟

暴力递归不是最好的方法 要用些更为巧妙的方法解决问题 非必要不递归

题目链接

leetcode.cn/problems/qi…