爬楼梯

Posted zhtzyh2012

tags:

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

题目地址: https://leetcode-cn.com/problems/climbing-stairs/
题目说明: 
   假设你正在爬楼梯,需要n阶你才能到达楼顶.每次你可以爬1或2个台阶,你有多少种不同的方法可以爬到楼顶.
注意事项:给定n是一个正整数

题目事例:
   输入:2
   输出:2
   解释:有两种方法可以爬到楼顶.
   1.1阶+1阶
   2.2阶

方法一:使用斐波那契额数列,时间复杂度是O(n^2)

public class Solution {
   // 爬梯转化为非波那且数列,最笨的递归
   public int climbStairs(int n) {
      return (n <= 2) ? n : climbStairs(n-1) + climbStairs(n-2);
   }
}

方法二:使用含有备忘录形式的斐波那契数列,时间复杂度是O(n)

// 使用数组作为备忘录,减少递归状态树的使用
public int climbStairs(int n) {
   int[] nums = new int[n+1];  // 注意边界值使用n+1,否则在缓存时会出现问题.
   return climb (n, nums);
}
 
private int climb (int n, int[] nums) {
    if (n <= 2) return n;
    if (nums[n] > 0) return nums[n];
    nums[n] = climb(n-1, nums) + climb(n-2, nums);
    return nums[n];
}

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

爬楼梯

代码随想录算法训练营第三十八天 | 理论基础 ,509. 斐波那契数,70. 爬楼梯,746. 使用最小花费爬楼梯

代码随想录算法训练营第三十八天 | 509. 斐波那契数70. 爬楼梯746. 使用最小花费爬楼梯

[LeetCode] 70. 爬楼梯

爬楼梯算法

代码随想录|day38|动态规划part01● 理论基础 ● 509. 斐波那契数 ● 70. 爬楼梯 ● 746. 使用最小花费爬楼梯