LeetCode 70:爬楼梯|递归到动态规划全路径解析

本篇博客将通过 LeetCode 第 70 题 “Climbing Stairs”为例,系统讲解从递归暴力解法到记忆化搜索、再到动态规划及空间优化的四种典型思路,适合算法初学者深入掌握递归与 DP 基础。


LeetCode 70 | 爬楼梯

掌握这个题目,不仅能加深对递归与动态规划的理解,还为今后应对更复杂的算法题奠定坚实基础。

推荐初学者从这题入手,逐步建立起算法思维框架!

一、题目描述

你正在爬楼梯。需要 n 阶你才能到达楼顶。
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶?
示例:
输入:n = 3
输出:3
解释:

  1. 1 + 1 + 1
  2. 1 + 2
  3. 2 + 1

二、思路分析

这其实是一个典型的 斐波那契数列问题

因为:

  • 想到达第 n 阶,要么从 n-1 阶走一步上来;
  • 要么从 n-2 阶走两步上来。

所以有状态转移公式:
f(n) = f(n - 1) + f(n - 2)

三、方法一:递归(不带记忆)

思路

用最直观的递归实现:

  • 定义 f(n) 表示爬到第 n 阶的方法数
  • 基础条件:
    • f(1) = 1
    • f(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);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值