70爬楼梯问题求解

Posted super码王

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了70爬楼梯问题求解相关的知识,希望对你有一定的参考价值。

题目描述

思路分析

当阶数为 1 时 ,解法为 1

当阶数为 2 时 ,解法为 2

当阶数为 3 时 ,解法为 3

当阶数为 4 时 ,解法为 5

......

很明显可以分析出:一下公式:

代码实现:

  • 递归法
class Solution 
    public int climbStairs(int n) 
        if(n == 1) return 1;
        if(n == 2) return 2;
        return climbStairs(n-1) + climbStairs(n-2);
    

缺点:时间复杂度为O(n^2),存在重复计算,如下图:f(4) 和 f(3)

  • 递归法(优化,解决重复计算问题)
class Solution 

    //创建一个 map 专门存储 已计算的结果,防止重复计算
    private Map<Integer,Integer> map = new HashMap<>();

    public int climbStairs(int n) 
        if(n == 1) return 1;
        if(n == 2) return 2;

         //先从 map 中查找,如果能找到,就不使用递归来计算
         if(null != map.get(n))
             return map.get(n);
         else
             int result = climbStairs(n-1) + climbStairs(n-2);
             map.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;
        //由题目可知,n=1 => 1, n=2 => 2,所以从 n=3 开始
        for(int i = 3;i <= n;i++)
            result = pre + prePre;
            prePre = pre;
            pre = result;
        

        return result;
    

运行结果展示 

 

以上是关于70爬楼梯问题求解的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode 递归篇(70)

爬楼梯问题【多解法】

动态规划(斐波那契系列)---爬楼梯

「动态规划」LeetCode 70(爬楼梯)

leetcode70爬楼梯

lettcode 70 : 爬楼梯