力扣第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;
    }
}

猜你喜欢

转载自blog.csdn.net/m0_51456787/article/details/122811840