LeetCode:81.爬楼梯

目录

1.爬楼梯


1.爬楼梯

对于这道题,我们发现到达楼顶可以分为两部分,在楼顶的前一个位置跳一步到达,在楼顶的前两个位置跳两步到达,所以我们可以设一个方程来表示

dp[n]表示到达第n阶楼梯的方法数量,通过上面可以得出dp[n] = dp[n - 1] + dp[n - 2]这样的通式

开这个dp数组的时候可以开n的大小,也可以开n + 1,在这里选择n + 1的大小,这样从dp[1]到dp[n]刚好对应

在dp中,我们需要初始化dp[1]和dp[2],因为dp需要用到前两个位置,遍历的时候从3开始

cpp 复制代码
class Solution {
public:
    int climbStairs(int n) {
        if(n == 1 || n == 2) return n;
        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];
    }
};

我们可以进行空间优化,在这里我们发现只需要用到前两个位置,所以就不需要开数组了,用两个变量来表示前两个值

cpp 复制代码
class Solution {
public:
    int climbStairs(int n) {
        if(n == 1 || n == 2) return n;
        int a = 1, b = 2;
        for(int i = 3; i <= n; i++)
        {
            int c = a + b;
            a = b;
            b = c;
        }
        return b;
    }
};
相关推荐
ytttr87314 分钟前
matlab实现多标签K近邻(ML-KNN)算法
算法·机器学习·matlab
一招定胜负21 分钟前
逻辑回归调优三板斧:参数调整、阈值设定、数据集平衡
算法·机器学习·逻辑回归
豆约翰24 分钟前
Z字形扫描ccf
java·开发语言·算法
Salt_072827 分钟前
DAY 35 文件的规范拆分和写法
python·算法·机器学习
风筝在晴天搁浅33 分钟前
代码随想录 109.冗余连接Ⅱ
算法
业精于勤的牙33 分钟前
浅谈:算法中的斐波那契数(三)
算法·职场和发展
ss27338 分钟前
阻塞队列:三组核心方法全对比
java·数据结构·算法
小O的算法实验室39 分钟前
2026年SEVC SCI2区,面向空地跨域无人集群的目标引导自适应路径规划方法,深度解析+性能实测
算法·论文复现·智能算法·智能算法改进
Xの哲學1 小时前
Linux MAC层实现机制深度剖析
linux·服务器·算法·架构·边缘计算
埃伊蟹黄面1 小时前
算法 --- hash
数据结构·c++·算法·leetcode