力扣第70题.爬楼梯

题目

假设你正在爬楼梯。需要 n 阶你才能到达楼顶。

每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?

示例 1:

输入:n = 2
输出:2
解释:有两种方法可以爬到楼顶。

  1. 1 阶 + 1 阶
  2. 2 阶
    示例 2:

输入:n = 3
输出:3
解释:有三种方法可以爬到楼顶。

  1. 1 阶 + 1 阶 + 1 阶
  2. 1 阶 + 2 阶
  3. 2 阶 + 1 阶

提示:

1 <= n <= 45

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/climbing-stairs
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

题解一:递归求解

我也是第一次刷力扣,发现他的题解跟我之前写的题解形式不一样。慢慢来适应吧。
在这里插入图片描述

class Solution {
    public int climbStairs(int n) {
        if(n==1) return 1;
        if(n==2) return 2;
        return climbStairs(n-1)+climbStairs(n-2);
    }
}

这个答案是正确的,但是超出时间限制了
看上面的图我们知道,是因为f(4),f(3)等等重复计算,时间复杂度太高了。


题解二:哈希表法

那么我们就一次计算,可以用到哈希表。
已经计算好的数值,存入哈希表,这样就不用重复计算。

class Solution {
    private HashMap<Integer,Integer> shortMap=new HashMap<>();
    public int climbStairs(int n) {
        
        if(n==1) return 1;
        if(n==2) return 2;
        if(null !=shortMap.get(n))
            return shortMap.get(n);
        else{
            int result =climbStairs(n-1)+climbStairs(n-2);
            shortMap.put(n,result);
            return result;//result要放在这里
        }
        
    }
}

HashMap放在函数里面,结果也是正确的,但是为什么超时了

class Solution {
    public int climbStairs(int n) {
        HashMap<Integer,Integer> shortMap=new HashMap<>();//函数里面,不能有private和public
        if(n==1) return 1;
        if(n==2) return 2;
        if(null !=shortMap.get(n))//前后其实都一样
            return shortMap.get(n);
        else{
            int result =climbStairs(n-1)+climbStairs(n-2);
            shortMap.put(n,result);
            return result;
        }
        
    }
}

题解三:动态规划

参考上图中的右下角部分。

class Solution {
    public int climbStairs(int n) {
        
        if(n==1) return 1;
        if(n==2) return 2;
        int result=0;
        int pre=2;
        int prePre=1;
        for(int i=3;i<=n;i++){
            result=pre+prePre;
            prePre=pre;
            pre=result;
            
        }
        return result;
    }
}

如果这篇文章对你帮助很大,麻烦帮忙,点下友情链接: 鱼儿项目网(直接点这里),进去之后切换几个页面,停留几十秒。感激不尽。本站采集全网自媒体,网赚类,电商营销课程。里面有一些免费项目大家也可以看看

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

m明月Java3

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值