
本问题其实常规解法可以分成多个子问题,爬第 n 阶楼梯的方法数量,等于两个部分之和
- 爬上
n−1阶楼梯的方法数量。因为再爬 1 阶就能到第 n 阶 - 爬上
n−2阶楼梯的方法数量,因为再爬 2 阶就能到第 n 阶
所以我们得到公式 dp[n] = dp[n−1] + dp[n−2]
初始化 dp[0]=1 和 dp[1]=1
时间复杂度:O(n)
class Solution {
public int climbStairs(int n) {
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];
}
}
最近做动态规划的题目,发现最重要的还是要能够拿着笔一步一步模拟,才能真正搞懂步骤


![【代码随想录】【算法训练营】【第29天】 [491]非递减子序列 [46]全排列 [47]全排列II](https://img-blog.csdnimg.cn/direct/3c984346873f4d2786e800f6c50d1f09.png)
















