Climbing Stairs 基本动态规划:一维--力扣101算法题解笔记

7.2Climbing Stairs 基本动态规划:一维

基本动态规划概念了解

这里我们引用一下维基百科的描述:"动态规划(Dynamic Programming, DP)在查找有很多

重叠子问题的情况的最优解时有效。它将问题重新组合成子问题。为了避免多次解决这些子问

题,它们的结果都逐渐被计算并被保存,从简单的问题直到整个问题都被解决。因此,动态规划

保存递归时的结果,因而不会在解决同样的问题时花费时间......动态规划只能应用于有最优子结

构的问题。最优子结构的意思是局部最优解能决定全局最优解(对有些问题这个要求并不能完

全满足,故有时需要引入一定的近似)。简单地说,问题能够分解成子问题来解决。"

通俗一点来讲,动态规划和其它遍历算法(如深度优先搜索)都是将原问题拆成多个子问题

然后求解,它们之间最本质的区别是,动态规划保存子问题的解,避免重复计算。解决动态规

划问题的关键是找到状态转移方程,这样我们可以通过计算和储存子问题的解来求解最终问题。

同时,我们也可以对动态规划进行空间压缩,起到节省空间消耗的效果。这一技巧笔者将在

之后的题目中介绍。

在一些情况下,动态规划可以看成是带有状态记录(memoization)的优先搜索。状态记录的

意思为,如果一个子问题在优先搜索时已经计算过一次,我们可以把它的结果储存下来,之后遇

到该子问题的时候可以直接返回储存的结果。动态规划是自下而上的,即先解决子问题,再解

决父问题;而用带有状态记录的优先搜索是自上而下的,即从父问题搜索到子问题,若重复搜索

到同一个子问题则进行状态记录,防止重复计算。如果题目需求的是最终状态,那么使用动态搜

索比较方便;如果题目需要输出所有的路径,那么使用带有状态记录的优先搜索会比较方便。

题目描述

给定第n节台阶,每次可以走一步或走两步,求一共有多少种方式可以走完这些台阶。

输入输出样例

Input :3

Output:3

在这个样例中,一共有三种方法走完这三节台阶,每次走一步;先走一步,再走两步;先走两步,再走一步

题解

这个题难度还可以,就是一个十分经典的斐波那契数列题。定义一个数组dp。dpi表示走到第i节的方法数。因为我们每次可以走一步或者两步。所以第i节可以从第i-1或i-2节到达。换句话说,走到第i节的方法数即为走到第i-1节的方法数加上走到第i-2节的方法数。这样我们就得到了状态转移方程dp【i】 = dp【i-1】+dp【i-2】

发现了吗?dp【i】只和dp【i-1】和dp【i-2】有关。那就只用两个变量dp【i-1】和dp【i-2】来存储,是不是又降低了空间复杂度。

cpp 复制代码
#include <iostream>
using namespace std;

int climbStairs(int n) {
    if (n <= 2)  return n;
    int pre2 = 1, pre1 = 2, cur;
    for (int i = 2; i < n; ++i) {
        cur = pre1 + pre2;
        pre2 = pre1;
        pre1 = cur;
    }
    return cur;
}

int main() {
    int n = 3;
    cout << climbStairs(n) << endl;
    return 0;
}
相关推荐
别动我齐刘海1 小时前
ROS2 Jazzy + C++ 实战路线——进阶学习3
c++·人工智能·vscode·python·算法·机器学习·机器人
zhangfeng11331 小时前
《从“人工适配“到“智能生成“:KernelSwift 跨国产芯片算子迁移全栈方案解读》 —— 强调范式跃迁和跨硬件属性,适合偏架构分析的写法
人工智能·算法·华为·ai编程·npu
0+1111 小时前
算法 --滑动窗口
c++·算法·leetcode
reikocao2 小时前
大场景下 Hessian 特征值放大与退化检测
算法
hetao17338372 小时前
2026-09-18 hetao1733837 的刷题记录
c++·算法
wuyk5552 小时前
21.计数排序:不用比较的“空间换时间”排序算法
python·算法·排序算法
Rabitebla2 小时前
【Linux系统编程】 指令(二):一条路径是怎么定位到文件的
linux·c++·笔记·学习·算法
库玛西2 小时前
数据结构与算法之美:树、森林与二叉树全解析
c语言·数据结构·笔记·考研·算法·学习方法
木井巳2 小时前
【记忆化搜索】最长递增子序列
java·算法·leetcode·深度优先·剪枝·推荐算法
东方护航数据恢复(深圳)3 小时前
本地小算力设备数据恢复经典案例实操全解_东方护航数据恢复深圳店
大数据·服务器·算法·ai·gpu算力