当前位置: 首页 > news >正文

【LeetCode】70. 爬楼梯(简单)——代码随想录算法训练营Day38

题目链接:70. 爬楼梯

题目描述

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

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

示例 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

文章讲解:代码随想录

视频讲解:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

题解1:动态规划

思路:1个台阶有1种走法,2个台阶有2种走法(1+1和2)。3个台阶可以看成在1个台阶的走法上再走2步,或者在2个台阶的走法上再走1步;4个台阶可以看成在3个台阶的走法上再走2步,或者在2个台阶的走法上再走1步。即 n 个台阶的走法可以看成在 n - 2个台阶的走法上再走2步,或者在 n - 1个台阶的走法上再走1步。因此可以用动态规划求解。

动态规划分析:

  • dp 数组以及下标的含义:dp[i] 为 i 个台阶的走法。
  • 递推公式:dp[i] = dp[i - 1] + dp[i - 2]。
  • dp 数组初始化:dp[0] 没有意义,dp[1] = 1,dp[2] = 2。
  • 遍历顺序:从前向后。
  • 打印 dp 数组:1、2、3、5、......
/*** @param {number} n* @return {number}*/
var climbStairs = function(n) {const dp = new Array(n + 1);dp[1] = 1; // 1个台阶有1种走法dp[2] = 2; // 2个台阶有2种走法for (let i = 3; i <= n; i++) {dp[i] = dp[i - 1] + dp[i - 2]; // i 个台阶有 dp[i - 1] + dp[i - 2] 种走法}return dp[n];
};

分析:时间复杂度为 O(n),空间复杂度为 O(n)。

题解2:动态规划优化

思路:i 个台阶的走法依赖于 i - 1 和 i - 2 个台阶的走法,可以用两个变量存储,在循环中更新这2个变量。

/*** @param {number} n* @return {number}*/
var climbStairs = function(n) {if (n <= 2) {return n; // 1个台阶有1种走法,2个台阶有2种走法}let a = 1, b = 2; // a 为 i - 2个台阶的走法,b 为 i - 1 个台阶的走法for (let i = 3; i <= n; i++) {const c = a + b; // i 个台阶有 dp[i - 1] + dp[i - 2] 种走法a = b; // 更新 ab= c; // 更新 b}return b; // b 即为最终答案
};

分析:时间复杂度为 O(n),空间复杂度为 O(1)。

收获

当一个问题的答案依赖于较小的问题的答案时,可以使用动态规划法来求解。练习使用动态规划法解决问题,按照5部曲来分析。本题实际上是一个斐波那契数列。

相关文章:

【LeetCode】70. 爬楼梯(简单)——代码随想录算法训练营Day38

题目链接&#xff1a;70. 爬楼梯 题目描述 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢&#xff1f; 示例 1&#xff1a; 输入&#xff1a;n 2 输出&#xff1a;2 解释&#xff1a;有两种方法可以爬到…...

图数据库 之 Neo4j - Cypher语法基础(5)

节点(Nodes) Cypher使用()来表示一个节点。 () # 最简单的节点形式,表示一个任意无特征的节点,其实就是一个空节点(movie) # 如果想指向一个节点在其他地方,我们可以给节点添加一个变量名(如movie),表示一个变量名为 movie的节点。(:Movie) # 表示一个标签为 Movie 的匿名…...

打造智能物品租赁平台:Java与SpringBoot的实践

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…...

盘点那些世界名校计算机专业采用的教材

清华、北大、MIT、CMU、斯坦福的学霸们在新学期里要学什么&#xff1f;今天我们来盘点一下那些世界名校计算机专业采用的教材。 书单目录 1.《深入理解计算机系统》&#xff08;原书第3版&#xff09;2. 《算法导论》&#xff08;原书第3版&#xff09;3. 《计算机程序的构造和…...

编程笔记 Golang基础 013 格式化输入输出

编程笔记 Golang基础 013 格式化输入输出 一、格式化输出1. fmt.Print系列函数2. Printf格式说明3. 格式化布尔类型 二、格式化输入1. fmt.Scan系列函数注意事项 三、练习小结 Go语言中的格式化输入和输出主要通过标准库 fmt 包来实现。主要是输出需要格式化。 一、格式化输出 …...

身份证实名认证接口-简单的身份认证API调用方法

还在为复杂的API调用头疼不已&#xff1f;今天为大家带来一种超简单的身份认证API调用方法&#xff0c;让你的工作效率瞬间起飞&#xff01; Java调用代码如下&#xff1a; import java.io.*; import okhttp3.*; public class main { public static void main(String []ar…...

数据结构·顺序表

1数据结构简介 学习数据结构与算法之前&#xff0c;一般是先学数据结构&#xff0c;方便之后学习算法&#xff0c;那么数据结构拆开介绍&#xff0c;就是数据 和 结构&#xff0c;数据&#xff0c;生活中到处都是&#xff0c;结构&#xff0c;就是数据存储的方式&#xff0c;即…...

玩转网络抓包利器:Wireshark常用协议分析讲解

Wireshark是一个开源的网络协议分析工具&#xff0c;它能够捕获和分析网络数据包&#xff0c;并以用户友好的方式呈现这些数据包的内容。Wireshark 被广泛应用于网络故障排查、安全审计、教育及软件开发等领域。关于该工具的安装请参考之前的文章&#xff1a;地址 &#xff0c;…...

静态时序分析:SDC约束命令set_drive详解

相关阅读 静态时序分析https://blog.csdn.net/weixin_45791458/category_12567571.html 本章将讨论使用set_drive命令&#xff0c;它用于对输入端口的驱动能力建模。首先需要说明的是&#xff0c;默认情况下&#xff0c;DC在STA时默认输入端口的转换时间是0&#xff0c;这对于…...

C#算法(12)—对图像像素做X/Y方向的偏移

我们在上位机开发领域有时候需要对获取的图像的像素做整体的偏移,比如所有像素在X方向上偏移几个像素,或者所有像素在Y方向上偏移几个像素,本文就是开发了像素整体偏移算法来解决这个问题。 比如有一个图像大小为3*3,像素值如下图1,如果我想实现将这个幅图像的像素整体往右…...

说一说Eclipse的项目类型和常用项目的区别

Eclipse在新建项目的时候有很多类型&#xff0c;包括Java project、Web project等等&#xff0c;如下&#xff1a; 那么这些项目类型有什么区别呢&#xff1f;我们在创建项目的时候应该如何选择&#xff0c;了解清楚这一点还是非常重要的&#xff0c;但记住一个出发点&#xff…...

[opencv][windows]cmake opencv opencv_contrib所需的缓存文件下载

这个是windows上源码编译opencvopencv-contrib时候cmake时候缓存文件&#xff0c;只需要将压缩文件夹解压到源码目录下面,cmake-gui上configure时候就不会报错&#xff0c;注意解压后文件夹名字是.cache,文件夹名字不能改变&#xff0c;比如opencv/.cache&#xff0c;有的人解压…...

五步解决 Ubuntu 18.04 出现GLIBC_2.28 not found的解决方法

Ubuntu 18.04 出现GLIBC_2.28 not found的解决方法 参考debian网址https://packages.debian.org/buster/并搜索想要的软件或者工具等&#xff0c;如libc6,有结果如下&#xff1a; 具体就不介绍了&#xff0c;请浏览官网了解。 第一步&#xff1a;添加软件源&#xff0c;在/et…...

【Java EE初阶二十一】http的简单理解(二)

2. 深入学习http 2.5 关于referer Referer 描述了当前页面是从哪个页面跳转来的&#xff0c;如果是直接在地址栏输入 url(或者点击收藏夹中的按钮) 都是没有 Referer。如下图所示&#xff1a; HTTP 最大的问题在于"明文传输”,明文传输就容易被第三方获取并篡改. …...

STM32 与 ARM 谁比较强大?

STM32 和 ARM 是两个不同的概念&#xff0c;STM32 是一种微控制器产品&#xff0c;而 ARM 是一家处理器架构设计和许可的公司。因此&#xff0c;无法简单地比较它们的强大程度。 STM32 是基于 ARM Cortex-M 核的微控制器产品&#xff0c;具有高性能、低功耗、低成本和易于开发等…...

四、分类算法 - 朴素贝叶斯算法

目录 1、朴素贝叶斯算法 1.1 案例 1.2 联合概率、条件概率、相互独立 1.3 贝叶斯公式 1.4 朴素贝叶斯算法原理 1.5 应用场景 2、朴素贝叶斯算法对文本进行分类 2.1 案例 2.2 拉普拉斯平滑系数 3、API 4、案例&#xff1a;20类新闻分类 4.1 步骤分析 4.2 代码分析 …...

Javascript中var和let之间的区别

文章目录 一.变量提升(声)二.let和var的区别 区别&#xff1a; 1、var有变量提升&#xff0c;而let没有&#xff1b; 2、let不允许在相同的作用域下重复声明&#xff0c;而var允许&#xff1b; 3、let没有暂时性死区问题&#xff1b; 4、let创建的全局变量没有给window设置对应…...

不要抱怨,不如抱 Java 运算符吧 (1)

本篇会加入个人的所谓‘鱼式疯言’ ❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言 而是理解过并总结出来通俗易懂的大白话, 小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的. &#x1f92d;&#x1f92d;&#x1f92d;可能说的不是那么严谨.但小编初心是能让更多人…...

python之ftp小工具

文章目录 python之FTP小工具 python之FTP小工具 源码 #!/usr/bin/python3 import os import sys from pyftpdlib.authorizers import DummyAuthorizer from pyftpdlib.handlers import FTPHandler, ThrottledDTPHandler from pyftpdlib.servers import FTPServer import logg…...

攻防世界-web-Training-WWW-Robots

题目信息 In this little training challenge, you are going to learn about the Robots_exclusion_standard. The robots.txt file is used by web crawlers to check if they are allowed to crawl and index your website or only parts of it. Sometimes these files rev…...

从点灯到AI:用高云Tang Nano 4K玩转FPGA+MCU混合开发(附避坑指南)

从点灯到AI&#xff1a;高云Tang Nano 4K混合架构开发实战与避坑指南 在嵌入式AI和边缘计算领域&#xff0c;FPGA凭借其并行计算能力和低功耗特性&#xff0c;正成为越来越多开发者的选择。而高云Tang Nano 4K这款搭载Cortex-M3硬核的FPGA开发板&#xff0c;以其独特的"FP…...

用Python+OpenCV+SORT搞定高空抛物监测:从摄像头选型到代码调试的保姆级避坑指南

PythonOpenCVSORT高空抛物监测系统实战&#xff1a;从硬件选型到算法调优全解析 1. 项目背景与技术选型 高空抛物监测系统作为智慧社区建设的关键环节&#xff0c;面临着复杂的环境挑战。传统监控摄像头仅能记录画面&#xff0c;无法实现主动预警。而基于计算机视觉的智能分析…...

深入浅出DPCM与DAPM:图解高通音频架构如何实现动态功耗管理与低延迟播放

深入浅出DPCM与DAPM&#xff1a;图解高通音频架构如何实现动态功耗管理与低延迟播放 在智能穿戴设备和移动终端领域&#xff0c;音频系统的功耗优化一直是工程师面临的重大挑战。想象一下&#xff0c;当你的智能手表在待机状态下播放通知铃声时&#xff0c;如果每次都需要唤醒主…...

从STEMA风车题看Scratch画笔模块:如何用‘自制积木+不刷新’优化动画性能

从STEMA风车题看Scratch画笔模块&#xff1a;如何用‘自制积木不刷新’优化动画性能 在Scratch编程竞赛中&#xff0c;流畅的动画效果往往是评分的关键因素之一。以第15届蓝桥杯STEMA测评中的"绘制风车"真题为例&#xff0c;许多参赛者虽然能够实现基本功能&#xff…...

Tomcat 超精简总结

1. 定位轻量级 Java Web 服务器 / Servlet 容器只跑 Java 项目&#xff08;jsp、servlet、springboot 内嵌&#xff09;处理 动态请求&#xff0c;不擅长静态资源2. 核心作用解析 Servlet、JSP监听端口&#xff0c;接收浏览器请求调用 Java 代码执行业务返回页面 / 数据给客户端…...

企业级部署警告:Perplexity事实核查功能未开启溯源审计模式的5大合规风险,GDPR/CCPA双认证团队紧急通告

更多请点击&#xff1a; https://codechina.net 第一章&#xff1a;Perplexity事实核查功能的核心机制与合规定位 Perplexity 的事实核查功能并非依赖单一模型输出&#xff0c;而是构建于多层验证架构之上&#xff1a;实时检索增强生成&#xff08;RAG&#xff09;、跨源可信度…...

C++二叉树构建、深拷贝与可视化输出实战解析

1. 项目概述&#xff1a;从零构建与复制二叉树在C的日常开发中&#xff0c;尤其是涉及到算法、数据结构或者需要处理层次化数据的场景&#xff0c;二叉树是一个绕不开的基础结构。最近我在重构一个旧的项目模块&#xff0c;其中核心需求就是需要动态生成一个数据结构&#xff0…...

wlnmp一键安装包260520更新:多软件版本升级,支持多系统架构快速部署

wlnmp一键安装包更新&#xff1a;多软件版本升级wlnmp一键安装包在260520迎来更新&#xff0c;此次更新涉及多个重要软件的版本升级&#xff0c;包括nginx1.30.1、php8.2.31、php8.3.31等多个php版本&#xff0c;以及MySQL8.0.46、MySQL8.4.9。这些软件版本的更新&#xff0c;为…...

MATLAB文件选择对话框uigetfile()保姆级教程:从单文件到多选的完整配置流程

MATLAB文件选择对话框uigetfile()实战指南&#xff1a;从基础配置到高级技巧 在MATLAB日常开发中&#xff0c;文件选择对话框是用户交互的重要组成部分。uigetfile()函数作为MATLAB内置的文件选择工具&#xff0c;其灵活性和可定制性往往被初学者低估。本文将带您深入探索这个看…...

别再只用CIoU了!手把手教你用WIoU损失函数提升YOLOv5/v8模型精度(附代码对比)

超越CIoU&#xff1a;用WIoU损失函数解锁YOLOv5/v8模型的隐藏潜力 当目标检测模型的mAP指标陷入停滞&#xff0c;许多工程师的第一反应是调整数据增强策略或更换更复杂的网络结构。但鲜少有人意识到&#xff0c;损失函数这个看似基础的组件&#xff0c;往往才是突破精度瓶颈的…...