LeetCode70:爬楼梯

题目描述

假设你正在爬楼梯。需要 n 阶你才能到达楼顶。

每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?


解题思想

1.确定dp数组以及下标的含义

dpi: 爬到第i层楼梯,有dpi种方法

2.确定递推公式

从dpi的定义可以看出,dpi 可以有两个方向推出来。

首先是dpi - 1,上i-1层楼梯,有dpi - 1种方法,那么再一步跳一个台阶不就是dpi了么。

还有就是dpi - 2,上i-2层楼梯,有dpi - 2种方法,那么再一步跳两个台阶不就是dpi了么。

那么dpi就是 dpi - 1与dpi - 2之和!

所以dpi = dpi - 1 + dpi - 2 。

3.dp数组如何初始化

再回顾一下dpi的定义:爬到第i层楼梯,有dpi种方法。

dp0 = 0, dp1 = 1, dp2 = 2

4.确定遍历顺序

从递推公式dpi = dpi - 1 + dpi - 2;中可以看出,遍历顺序一定是从前向后遍历的

代码

c 复制代码
class Solution {
public:
    int climbStairs(int n) {
       
        /*
            dp[i]:达到第i阶有dp[i]种方法
            递推公式:dp[i] = dp[i-1]+dp[i-2]
            初始化:dp[0] = 0,dp[1] = 1,dp[2] = 2
            确定遍历顺序:从前向后

        */
        vector<int> dp(n + 1);
        
        dp[1] = 1, dp[2] = 2;
        for (int i = 3; i <= n; i++) {
            dp[i] = dp[i-1] + dp[i-2];
        }
        return dp[n];
    }
};

优化

c 复制代码
class Solution {
public:
    int climbStairs(int n) {
        if (n <= 2) return n;
        /*
            dp[i]:达到第i阶有dp[i]种方法
            递推公式:dp[i] = dp[i-1]+dp[i-2]
            初始化:dp[0] = 0,dp[1] = 1,dp[2] = 2
            确定遍历顺序:从前向后

        */
        int dp[3];
        dp[0] = 0, dp[1] = 1, dp[2] = 2;
        for (int i = 3; i <= n; i++) {
            dp[0] = dp[1];
            dp[1] = dp[2];
            dp[2] = dp[0] + dp[1];
        }
        return dp[2];
    }
};
相关推荐
小超人诞生日记6 分钟前
C++ STL 反向迭代器:从源码框架到适配器实现
c++·算法
青少儿编程课堂15 分钟前
蓝桥杯青少组图形化 + 全国青少年信息素养大赛 + 电子学会Scratch考级:校园成语接龙大挑战解析
c++·python·算法·bfs·信息学竞赛
老师我太想进步了20261 小时前
【数据结构-1】例解算法复杂度
数据结构·算法
tyler_download1 小时前
deepseek后训练算法:位置编码算法RoPE详解1
算法
青少儿编程课堂2 小时前
蓝桥杯·全国青少年信息素养大赛·电子学会C/C++考级:分层图最短路解析
c++·python·算法·bfs·信息学竞赛
YSL0701242 小时前
一文通关-----排序
数据结构·算法
ZhengEnCi12 小时前
GPT-6 Astra 爆改 Qwen 权重真有那么神吗:权重空间编程 0.016% 参数的真相
算法·架构
罗西的思考13 小时前
【轻量化复刻大模型 / KIMI K3】KDA(Kimi Delta Attention):并行
人工智能·算法·机器学习
夜不会漫长15 小时前
C++:红黑树
数据结构·算法
AI备案指南-满满15 小时前
算法备案审核不通过,一般是什么原因?
java·人工智能·算法·大模型备案·算法备案·大模型登记