LeetCode题练习与总结:爬楼梯--70

一、题目描述

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

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

示例 1:

输入:n = 2
输出:2
解释:有两种方法可以爬到楼顶。
1. 1 阶 + 1 阶
2. 2 阶

示例 2:

输入:n = 3
输出:3
解释:有三种方法可以爬到楼顶。
1. 1 阶 + 1 阶 + 1 阶
2. 1 阶 + 2 阶
3. 2 阶 + 1 阶

提示:

  • 1 <= n <= 45

二、解题思路

  1. 如果楼梯只有 1 阶或 2 阶,那么方法数就等于楼梯的阶数,因为只有一种方法可以到达第一阶(爬一阶),有两种方法可以到达第二阶(爬两阶或先爬一阶再爬一阶)。

  2. 对于超过 2 阶的楼梯,我们使用一个循环来计算每一阶的方法数。我们初始化两个变量 a 和 b 分别为 1 和 2,它们代表到达第一阶和第二阶的方法数。

  3. 从第三阶开始,我们使用一个循环来计算每一阶的方法数。对于每一阶 i,我们计算到达它的方法数 temp,这个方法数是到达前两阶的方法数之和(a + b)。

  4. 然后,我们将 a 更新为 b,将 b 更新为 temp。这样,在下一轮循环中,a 将代表到达前一级的方法数,而 b 将代表到达当前级的方法数。

  5. 当循环结束时,b 将包含到达第 n 阶的方法数,我们将其返回作为结果。

三、具体代码

class Solution {
    public int climbStairs(int n) {
        if (n <= 2) {
            return n;
        }
        
        int a = 1, b = 2, temp;
        for (int i = 3; i <= n; i++) {
            temp = a + b;
            a = b;
            b = temp;
        }
        
        return b;
    }
}

四、时间复杂度和空间复杂度

1. 时间复杂度
  • O(n) 这是因为代码中有一个从 3 到 n 的循环,循环的次数与 n 的值成正比。
  • 在这个循环中,每次迭代只进行了常数时间的操作(即计算两个数的和,并更新这两个数)。
  • 因此,总的时间复杂度是 O(n)。
2. 空间复杂度
  • O(1) 代码中只使用了几个固定数量的变量(a、b 和 temp)来存储中间结果,而不是使用与 n 成正比的额外空间。
  • 因此,不管输入的 n 有多大,所需的额外空间都保持不变,即常数空间。
  • 所以,空间复杂度是 O(1)。

五、总结知识点

1. 基础编程概念

  • 变量的声明和初始化:int a = 1, b = 2, temp; 声明了三个整型变量 ab 和 temp,并初始化 a 和 b
  • 循环结构:for 循环用于重复执行一组语句,直到指定的条件不再满足。在这个代码中,循环从 3 运行到 n

2. 递推关系

  • 斐波那契数列:代码使用了一个递推关系来计算斐波那契数列中的第 n 个数,即 F(n) = F(n-1) + F(n-2),其中 F(1) = 1 和 F(2) = 2

3. 动态规划

  • 动态规划是一种算法设计技术,它将复杂问题分解成更小的子问题,并存储这些子问题的解,以避免重复计算。在这个代码中,a 和 b 变量分别存储了到达前两个楼梯阶的方法数,而 temp 存储了到达当前楼梯阶的方法数。

4. 算法优化

  • 空间优化:代码通过只存储前两个斐波那契数,而不是使用数组来存储所有的斐波那契数,从而将空间复杂度从 O(n) 降低到 O(1)。

5. 边界条件处理

  • 代码首先检查 n 的边界条件,如果 n 小于等于 2,则直接返回 n,这是因为斐波那契数列的前两个数是固定的。

6. 迭代与递归

  • 虽然斐波那契数列可以通过递归方式轻松实现,但递归解决方案通常效率低下,因为它会进行大量的重复计算。这段代码使用迭代方法来计算斐波那契数列,这是一种更高效的实现方式。

以上就是解决这个问题的详细步骤,希望能够为各位提供启发和帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/555963.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

机器学习笔记 - 使用 OpenCV 的结构化森林进行边缘检测

一、简述 边缘检测是计算机视觉领域中一项非常重要的任务。这是许多纯计算机视觉任务(例如轮廓检测)的第一步。即使涉及深度学习,较深层也首先学习识别边缘,然后再学习图像的复杂特征。所以,我们可以说边缘检测在计算机视觉领域非常重要。拥有良好且高效的图像边缘检测算法…

微信小程序实现美食检索功能

1、打开浏览器搜索&#xff1a;腾讯位置服务 2、注册一个账号&#xff0c;有账号的直接登陆就行 3、注册登陆成功后&#xff0c;点击控制台 4、进入控制台后点击我的应用——>创建应用 5、添加key,注意看注释 6、key添加成功后&#xff0c;开始分配额度&#xff08;配额&…

复合机器人在磁钢上下料中的应用及其优势分析

复合机器人是一种集成了移动机器人和工业机器人功能的设备&#xff0c;其独特之处在于拥有“手、脚、眼、脑”的综合能力&#xff0c;从而实现了更高的灵活性和操作效率。在磁钢上下料的应用场景中&#xff0c;复合机器人能够发挥显著的优势。 首先&#xff0c;复合机器人可以根…

【 书生·浦语大模型实战营】作业(五):LMDeploy 量化部署

【 书生浦语大模型实战营】作业&#xff08;五&#xff09;&#xff1a;LMDeploy 量化部署 &#x1f389;AI学习星球推荐&#xff1a; GoAI的学习社区 知识星球是一个致力于提供《机器学习 | 深度学习 | CV | NLP | 大模型 | 多模态 | AIGC 》各个最新AI方向综述、论文等成体系…

vscode绿绿主题setting config

下载插件Green Tree Theme 选greentree ctrl shift p找到setting {"workbench.colorTheme": "Green Tree","editor.fontSize": 16.5, // 字号"workbench.colorCustomizations": {"[Green Tree]": {"activityBarBadge.…

android远程更新下载apk

最近业务有涉及到&#xff0c;奈何是个app代码小白&#xff0c;遂记录一下 一&#xff1a;AndroidManifest.xml文件配置 application标签里面加上 android:networkSecurityConfig"xml/network_config" <!-- app下载更新配置--> <uses-permission andr…

Hugging Face 推出 Idefics2 视觉语言模型

Hugging Face 公司宣布推出 Idefics2&#xff0c;这是一个多功能模型&#xff0c;能够理解和生成基于图像和文本的文字回复。该模型为回答视觉问题、描述视觉内容、根据图像创作故事、文档信息提取&#xff0c;甚至根据视觉输入执行算术运算树立了新的标杆。 Idefics2 仅有 80…

java死锁

一、什么是死锁 锁是个非常有用的工具&#xff0c;运用场景非常多&#xff0c;因为它使用起来非常简单&#xff0c;而且易于理解。但同时它也会带来一些困扰&#xff0c;那就是可能会引起死锁&#xff0c;一旦产生死锁&#xff0c;就会造成系统功能不可用。 比如我们现在有Th…

网络防火墙技术知多少?了解如何保护您的网络安全

在当前以网络为核心的世界中&#xff0c;网络安全成为了至关重要的议题。网络防火墙是一种常见的保护网络安全的技术&#xff0c;用于监控和控制网络流量&#xff0c;阻止未经授权的访问和恶意活动。今天德迅云安全就带您了解下防火墙的一些相关功能和类型。 防火墙的五个功能…

使用clickhouse-backup迁移数据

作者&#xff1a;俊达 1 说明 上一篇文章中&#xff0c;我们介绍了clickhouse-backup工具。除了备份恢复&#xff0c;我们也可以使用该工具来迁移数据。 这篇文章中&#xff0c;我们提供一个使用clickhouse-backup做集群迁移的方案。 2 前置条件 1、源端和目标端网络联通&a…

SRIO系列-仿真测试

一、前言 前两篇已经讲述了SRIO协议的概况&#xff0c;以及xilinx SRIO IP核的使用方式&#xff0c;已经在搭建工程的过程中时钟和复位的注意事项。 二、设计框图 整个框图也是按照之前的工程进行搭建&#xff0c;首先时SRIO_Channel&#xff0c;由SRIO IP核和时钟、复位模块…

使用yolov5训练自己的目标检测模型

使用yolov5训练自己的目标检测模型 使用yolov5训练自己的目标检测模型1. 项目的克隆2. 项目代码结构3. 环境的安装和依赖的安装4. 数据集和预训练权重的准备4.1利用labelimg标注数据和数据的准备4.1.1 **labelimg介绍:**4.1. 2 labelimg的安装 4.2 使用labelimg4.2.1 数据准备4…

[疑难杂症2024-003]如何判断一张没有头信息的dcm图像,是否是压缩图像?

本文由Markdown语法编辑器编辑完成&#xff0e; 1. 前言: DCM格式&#xff0c;是医学图像领域里面的通用格式&#xff0e;DCM图像一般分为两大部分&#xff0c;一部分是TAG信息&#xff0c;一部分是像素. 而TAG信息&#xff0c;一般又会分为两部分&#xff0c;如下图所示, 是…

编写Spark独立应用程序

执行本文之前&#xff0c;先搭建好spark的开发环境&#xff0c;我目前只搭建了standalone模式&#xff0c;参考链接 &#xff1a; Spark Standalone模式部署-CSDN博客 1. 安装sbt 1&#xff09;下载sbt 网址&#xff1a;https://www.scala-sbt.org/download.html &#xff0c…

Linux 系统下的进程间通信 IPC 入门 「下」

以下内容为本人的学习笔记&#xff0c;如需要转载&#xff0c;请声明原文链接 微信公众号「ENG八戒」https://mp.weixin.qq.com/s/IvPHnEsC6ZdIHaFL8Deazg 共享内存 我们在进程间传输比较大的数据块时&#xff0c;通常选用共享内存的方式。共享内存大小也是有限制的&#xff0…

Python进阶编程 --- 3.闭包、装饰器、设计模式、多线程、网络编程、正则表达式、递归

文章目录 第三章&#xff1a;3.1 闭包3.2 装饰器语法糖写法 3.3 设计模式3.3.1 单例模式3.3.2 工厂模式 3.4 多线程3.4.1 进程、线程和并行执行3.4.2 多线程编程 3.5 网络编程3.5.1 Socket3.5.2 服务端开发3.5.3 客户端开发 3.6 正则表达式3.6.1 基础匹配3.6.2 元字符匹配单字符…

风力发电自动化控制系统中的智能化技术应用研究

风力发电自动化控制系统中的智能化技术应用研究 随碳中和目标的提出和执行&#xff0c;风能发电作为新能源行业的核心部分&#xff0c;步入了它的黄金发展期。由于风能资源具有间歇性、随机性等特点&#xff0c;这给风电的高效利用带来了巨大挑战。为了增强风力发电系统的工作效…

Py深度学习基础|Numpy基础总结

注&#xff1a;本文来自菜鸟教程学习总结 一、数组属性 NumPy 的数组中比较重要 ndarray 对象属性有&#xff1a; 注意&#xff1a;使用reshape后&#xff0c;数组的结构&#xff08;即元素的排列顺序和内在连接&#xff09;没有改变&#xff0c;但因为返回的是一个视图&#…

PTA L1-009 N个数求和 【C++】【辗转相除法】【Python】

C&#xff1a; 辗转相除法&#xff1a; 每次算最小公倍数和最大公约数都是用的常规思路&#xff0c;本身是不会有错的&#xff0c;但是当数据很大时&#xff0c;就会出现错误&#xff0c;时间复杂度过高 辗转相除法&#xff0c;又称欧几里德算法&#xff08;Euclidean Algori…

接口压力测试 jmeter--增强篇(二)

前期准备 1. JMeter的插件的安装 下载Jmeter Plugins Manager对插件进行管理 &#xff08;1&#xff09;下载地址&#xff1a;https://jmeter-plugins.org/install/Install/ &#xff08;2&#xff09;下载后&#xff0c;将jar包放到jmeter包目录下/lib/ext目录下 &#xff0…
最新文章