70. 爬楼梯

news2024/11/25 12:41:39

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

思路:(动态规划)

  • 定义一个数组 dp 存储上楼梯的方法数(为了方便讨论,数组下标从 1 开始),dp[i] 表示走到第 i 个楼梯的方法数目。
  • 第 i 个楼梯可以从第 i-1 和 i-2 个楼梯再走一步到达,走到第 i 个楼梯的方法数为走到第 i-1 和第 i-2 个楼梯的方法数之和:
    d p [ i ] = d p [ i − 1 ] + d p [ i − 2 ] dp[i] = dp[i - 1] + dp[i - 2] dp[i]=dp[i1]+dp[i2]

改进: 考虑到 dp[i] 只与 dp[i - 1] 和 dp[i - 2] 有关,因此可以只用两个变量来存储 dp[i - 1] 和 dp[i - 2],使得原来的 O(N) 空间复杂度优化为 O(1) 复杂度。

代码:(Java)

public class climbstars {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int n = 2;
		System.out.println(climbStairs(n));
	}
	public static int climbStairs(int n) {
		int [] dp = new int[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];
    }
}
改进:
public class climbstars {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int n = 2;
		System.out.println(climbStairs(n));
	}
	public static int climbStairs(int n) {
	    if (n <= 2) {
	        return n;
	    }
	    int pre2 = 1, pre1 = 2;
	    for (int i = 2; i < n; i++) {
	        int cur = pre1 + pre2;
	        pre2 = pre1;
	        pre1 = cur;
	    }
	    return pre1;
	}
}

运行结果:

在这里插入图片描述

注:仅供学习参考!

题目来源:力扣.

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何将python脚本打包成可执行exe文件

如何将python脚本打包成可执行exe文件 前提条件 1. 新建一个python项目&#xff0c;并且配置虚拟环境 2. 安装pyinstaller 打包EXE文件 写一个支持入参的python脚本&#xff0c;打包成exe文件 找一张图片作为exe文件的图标 百度搜索” 在线jpg转cio”,将图片转换成cio格式 …

MySQL基础篇第11章(数据处理之增删改)

1.插入数据 1.1 实际问题 1.2 方式1&#xff1a;VALUES的方式添加 使用这种语法一次只能向表中插入一条数据。 情况1&#xff1a;为表的所有字段按默认顺序插入数据 INSERT INTO 表名 VALUES (value1,value2,....);值列表中需要为表的每一个字段指定值&#xff0c;并且值的…

MTIC工业大脑,海量接入网关!

MTIC3.0工业大脑是高性能&#xff0c;高可靠性的低代码开发数据核心平台&#xff0c;支持上万级别的网关设备同时在线&#xff0c;提供标准版本业务系统&#xff0c;可实现多业主工程项目并行管理&#xff0c;吸取大型物联网数据监测工程专家建议&#xff0c;实现项目精细化管理…

什么是DPU

什么是DPU 什么是 DPU&#xff1f; 在数据中心、DPU 或数据处理单元中移动数据的专家是一种新型的可编程处理器&#xff0c;将与 CPU 和 GPU 一起成为计算的三大支柱之一。 当然&#xff0c;您可能已经熟悉中央处理器。 多年来&#xff0c;CPU 是大多数计算机中唯一的可编程元…

如何避免成为背锅侠?

你被同事甩过锅吗&#xff1f; 打工人在职场中犯错都是不可避免的。 但明明不是自己的问题&#xff0c;还要背个黑锅&#xff0c;就非常闹心了&#xff01; 大家好&#xff0c;我是大D。 前几天&#xff0c;大D开发完了一个项目&#xff0c;在交付验收中发现业务逻辑存在漏洞&a…

java swing人机对战五子棋(含背景音乐)

一、项目简介 本项目是一套基于java swing的人机对战五子棋系统&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Java学习者。 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调试&#xf…

java BigDecimal保留两位小数

对于一些精准的数字&#xff0c;如涉及到金额时我们一般会使用BigDecimal类型来保存和处理。在处理保留小数位数时&#xff0c;如果通过DecimalFormat表达式需要注意下。 1、通过DecimalFormat保留两位小数 通过上图可以看到&#xff0c;#在补位时&#xff0c;如果该位没有数…

C/C++入门005-C语言数组

文章目录C语言数组数组的基本概念及定义数组定义数组中的几个名词数组长度计算方法二维数组的含义二维数组的定义字符数组字符函数1. strlen 计算字符串长度2. strcpy 字符串拷贝3. strcat 字符串追加4. strcmp 字符串比较1. strncpy 字符串拷贝3. strncmp 字符串比较4. strstr…

【web安全】——web渗透的前缀知识

作者名&#xff1a;Demo不是emo 主页面链接&#xff1a;主页传送门 创作初心&#xff1a;舞台再大&#xff0c;你不上台&#xff0c;永远是观众&#xff0c;没人会关心你努不努力&#xff0c;摔的痛不痛&#xff0c;他们只会看你最后站在什么位置&#xff0c;然后羡慕或鄙夷座…

海康摄像头CVE-2021-36260漏洞复现

海康摄像头CVE-2021-36260漏洞复现1.漏洞介绍2.手动测试2.1.摄像头版本2.2.漏洞复现2.2.1.更改URL2.2.2.抓包修改数据2.2.3.更换请求路径2.2.4.后期利用3.POC测试3.1.下载POC3.2.运行POC3.3.测试漏洞3.4.执行命令1.漏洞介绍 攻击者利用该漏洞可以用无限制的 root shell 来完全控…

Internet Download Manager6.41加速器最快的电脑工具下载器

IDM下载器&#xff0c;全称是Internet Download Manager&#xff0c;中文是互联网下载管理器可以说是最好用下载速度最快的下载器&#xff0c;可以利用全部带宽多线程下载&#xff0c;让你的下载速度起飞&#xff01; 提到下载工具&#xff0c;大多数国人映入脑海的或许是迅雷…

优雅应对故障:QQ音乐怎么做高可用架构体系?

导语 | 故障是开发者高频关注的问题。在分布式系统建设的过程中&#xff0c;我们思考的重点不是避免故障&#xff0c;而是拥抱故障&#xff0c;通过构建高可用架构体系来获得优雅应对故障的能力。本文作者冯煦亮从架构、工具链、可观测三个维度&#xff0c;介绍了QQ音乐多年来积…

迅速配置hadoop Xshell 会话(安装java和jdk)

安装 yum install -y epel-release 防火墙 systemctl stop firewalld systemctl disable firewalld.service root权限 vim /etc/sudoers yy p 创建文件夹 mkdir /opt/module mkdir /opt/software chown hhh:hhh /opt/module/ chown hhh:hhh /opt/software/ cd /opt/ ll 卸…

shell第六天练习

正则表达式练习题&#xff1a; 1、显示/etc/rc.d/rc.sysinit文件中以不区分大小的h开头的行&#xff1b; 2、显示/etc/passwd中以sh结尾的行; 3、显示/etc/fstab中以#开头&#xff0c;且后面跟一个或多个空白字符&#xff0c;而后又跟了任意非空白字符的行&#xff1b; 4、查找…

2023年AI十大展望:GPT-4领衔大模型变革,谷歌拉响警报,训练数据告急

新年伊始&#xff0c;大模型的话题热度不减。2022年11月底&#xff0c;ChatGPT展现的惊人能力将大模型研究和应用热度推向高潮&#xff0c;人们激烈讨论着这个高级“物种”的推出意味着什么&#xff0c;比如是否会颠覆搜索引擎市场格局。踏入2023年&#xff0c;这不禁让我们对G…

2、可观测性--数据源

文章目录监控数据来源端上访问应用程序业务监控基础设施可观测性核心概念日志&#xff08;Logging&#xff09;统计指标&#xff08;Metrics&#xff09;链路追踪&#xff08;Tracing&#xff09;三者之间关系监控数据来源 我们一般讲的数据观测&#xff0c;其实观测的就是从发…

(Java高级教程)第三章Java网络编程-第二节:套接字(Socket)编程基本概述

文章目录一&#xff1a;网络编程相关概念&#xff08;1&#xff09;什么是网络编程&#xff08;2&#xff09;网络编程中的相关概念①&#xff1a;发送端和接收端②&#xff1a;请求和响应③&#xff1a;服务端和客户端二&#xff1a;TCP和UDP&#xff08;1&#xff09;TCP&…

nVisual自动计算线缆长度

nVisual创建线缆后&#xff0c;需要对线缆长度进行计算&#xff0c;比如室外场景下光缆长度的测量及室内综合布线长度测量。nVisual可实现线缆生成后自动线缆长度的计算和手动测量线缆长度。本章将介绍测量长度接口的具体实现思路及接口调用。 一、计算原理 1.区分场景 nVis…

基于 Log 的通用增量 Checkpoint​

摘要&#xff1a;本文整理自 Apache Flink Contributor 俞航翔 9 月 24 日在 Apache Flink Meetup 的分享。主要内容包括&#xff1a;Checkpoint 性能优化之路解析 Changelog一览 State/Checkpoint 优化Tips&#xff1a;点击「阅读原文」查看原文视频&演讲 ppt01Checkpoint…

nodejs+npm的安装与配置

下载与安装下载点击_Node.js中文网_根据自身系统进行下载即可&#xff08;建议下载10版本的&#xff0c;尽量不要下最新版本的&#xff09;配置nodejs相关配置简介&#xff1a;Node.js是一个基于Chrome V8引擎的JavaScript运行环境&#xff0c;让JavaScript 运行在服务端的开发…