leetcode 70. 爬楼梯
题目
解题思路
-
状态转移方程:
- 设
dp[i]
表示到达第i
阶台阶的方法数。 - 则有
dp[i] = dp[i-1] + dp[i-2]
,因为到达第i
阶台阶可以从第i-1
阶或第i-2
阶台阶爬上来。
- 设
-
边界条件:
dp[1] = 1
,表示到达第1阶台阶只有1种方法。dp[2] = 2
,表示到达第2阶台阶有2种方法(1+1 或 2)。
-
优化空间复杂度:
- 由于
dp[i]
只依赖于dp[i-1]
和dp[i-2]
,因此不需要存储整个数组,只需要记录最后两个值即可。
- 由于
代码实现
class Solution {
public:
int climbStairs(int n) {
if (n <= 2) return n;
int a = 1, b = 2, c;
for (int i = 3; i <= n; ++i) {
c = a + b;
a = b;
b = c;
}
return c;
}
};
注意事项
-
边界条件处理:
- 当
n
小于等于 2 时,直接返回n
,因为此时只有一种或两种方法。
- 当
-
变量初始化:
- 初始化
a
和b
分别为 1 和 2,分别代表到达第1阶和第2阶的方法数。
- 初始化
-
循环控制:
- 循环从 3 开始到
n
,确保覆盖所有可能的台阶数。
- 循环从 3 开始到
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!