本篇博客将通过 LeetCode 第 70 题 “Climbing Stairs”为例,系统讲解从递归暴力解法到记忆化搜索、再到动态规划及空间优化的四种典型思路,适合算法初学者深入掌握递归与 DP 基础。
文章目录
LeetCode 70 | 爬楼梯
掌握这个题目,不仅能加深对递归与动态规划的理解,还为今后应对更复杂的算法题奠定坚实基础。
推荐初学者从这题入手,逐步建立起算法思维框架!
一、题目描述
你正在爬楼梯。需要 n 阶你才能到达楼顶。
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶?
示例:
输入:n = 3
输出:3
解释:
- 1 + 1 + 1
- 1 + 2
- 2 + 1
二、思路分析
这其实是一个典型的 斐波那契数列问题。
因为:
- 想到达第
n阶,要么从n-1阶走一步上来; - 要么从
n-2阶走两步上来。
所以有状态转移公式:
f(n) = f(n - 1) + f(n - 2)
三、方法一:递归(不带记忆)
思路
用最直观的递归实现:
- 定义
f(n)表示爬到第n阶的方法数 - 基础条件:
f(1) = 1f(2) = 2
- 转移方程:
f(n) = f(n-1) + f(n-2)
C++代码
class Solution {
public:
int climbStairs(int n) {
if (n == 1) return 1;
if (n == 2) return 2;
return climbStairs(n - 1) + climbStairs(n - 2);
}

4430

被折叠的 条评论
为什么被折叠?



