题目介绍
力扣70题:leetcode-cn.com/problems/cl…
方法:动态规划
本问题其实常规解法可以分成多个子问题,爬第n阶楼梯的方法数量,等于两部分之和
- 爬上
n−1阶楼梯的方法数量。因为再爬1阶就能到第n阶 - 爬上
n−2阶楼梯的方法数量,因为再爬2阶就能到第n阶
所以我们得到公式:dp[n]=dp[n−1]+dp[n−2]
同时需要初始化 dp[0]=1 和 dp[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)。