70. 爬楼梯

224 阅读1分钟

题目介绍

力扣70题:leetcode-cn.com/problems/cl…

image.png

方法:动态规划

本问题其实常规解法可以分成多个子问题,爬第n阶楼梯的方法数量,等于两部分之和

  • 爬上 n−1 阶楼梯的方法数量。因为再爬1阶就能到第n
  • 爬上 n−2 阶楼梯的方法数量,因为再爬2阶就能到第n

所以我们得到公式:dp[n]=dp[n−1]+dp[n−2]

同时需要初始化 dp[0]=1dp[1]=1

代码如下:

class Solution {
    public int climbStairs(int n) {
        if(n == 0) {
            return 0;
        }
        int[] dp = new int[n + 1];
        dp[0] = 1;
        dp[1] = 1;
        for(int i = 2 ; i <= n ;i++) {
            dp[i] = dp[i - 1] + dp[i - 2];
        }
        return dp[n];
    }
}

复杂度分析

  • 时间复杂度:循环执行 n 次,每次花费常数的时间代价,故渐进时间复杂度为 O(n)
  • 空间复杂度:这里只用了常数个变量作为辅助空间,故渐进空间复杂度为 O(1)