Leetcode—70.爬楼梯【简单】

news2024/11/23 22:30:16

2023每日刷题(二十七)

Leetcode—70.爬楼梯

在这里插入图片描述

动态规划思想

动态规划算法的本质是使用空间换时间,通过计算和记录状态来得到最优解。

在分析动态规划类题目时,我们可以通过3个问题对题目进行基本的拆解。

  • 1.问题是否分阶段,阶段是什么?
  • 2.与问题的最优解有关的子问题是什么?
  • 3.透过不同阶段、最优解和子问题,我们应当关注(计算和记录)的状态具体是什么?

前两个问题比较容易回答。

1.爬楼梯是分阶段的,到达楼顶所需的n级台阶即对应的n个阶段。

2.题目的最优解是指最终到达楼顶,有多少种不同的实现方法;每个阶段都可以对应一个子问题,即有多少种不同的方法可以到达当前台阶。

关键在于第3个问题。根据题目描述“每次可以爬1或2个台阶”,这句话定义了状态之间的关联关系,决定了状态转移的规则。

假设当前台阶为n,上述规则决定了我们可以通过两个阶段到达这里:从n-1台阶爬1步,或者从n-2台阶爬2步,因此到达台阶n可能的方法总数等于到达台阶n-1和台阶n-2的可能总数之和,这符合我们看到题目时马上会有的“直觉”,越往上走可能的走法越多。

使用数组dp记录到达每一个台阶可能的方法数,上述逻辑可以表示为dp[i]=dp[i-1]+dp[i-2]。通过这个状态转移函数,我们可以从1级台阶、2级台阶开始计算出到达3级台阶、4级台阶乃至n级台阶不同方法的总量。

实现代码

int climbStairs(int n) {
    int dp[50] = {0};
    if(n < 2) {
        return n;
    }
    dp[1] = 1;
    dp[2] = 2;
    for(int i = 3; i <= n; i++) {
        dp[i] = dp[i - 1] + dp[i - 2];
    }
    return dp[n];
}

运行结果

在这里插入图片描述
● 时间复杂度:O(n),n为台阶数。
● 空间复杂度:O(n),n为台阶数。

动态规划优化算法思路

观察解法一,每次计算用到的被记录状态都是dp[i-1]、dp[i-2],除非有其他需要,否则单纯计算最终解并不用保留中间过程的结果,dp[i]对dp[i-1]和dp[i-2]的依赖使用两个变量即可记录,例如,定义变量first和second。用常数个变量代替长度为n的线性存储结构,使空间复杂度由O(n)降低至O(1),在提高存储效率的同时执行效率也会得到提升。

优化算法后实现代码

int climbStairs(int n) {
    int dp[50] = {0};
    if(n < 2) {
        return n;
    }
    int first = 1;
    int second = 2;
    for(int i = 3; i <= n; i++) {
        second = first + second;
        first = second - first;
    }
    return second;
}

运行结果

在这里插入图片描述
● 时间复杂度:O(n),n为台阶数。
● 空间复杂度:O(1)。

之后我会持续更新,如果喜欢我的文章,请记得一键三连哦,点赞关注收藏,你的每一个赞每一份关注每一次收藏都将是我前进路上的无限动力 !!!↖(▔▽▔)↗感谢支持!

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

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

相关文章

Java编程--定时器/线程池/工厂模式/ ThreadPoolExecutor

前言 逆水行舟&#xff0c;不进则退&#xff01;&#xff01;&#xff01; 目录 什么是定时器 实现一个定时器 自己实现一个定时器 什么是线程池 线程池的使用&#xff1a; 什么是工厂模式&#xff1f; 自己实现一个线程池&#xff1a; ThreadPoolExecutor 类…

卓越进行时 | 信息安全测试公益培训班报名!先到先得

为配合推进江苏省网络安全工作的部署实施&#xff0c;培训网络安全技术人才&#xff0c;针对全省网络技术骨干人员&#xff0c;近期&#xff0c;由江苏省网络空间安全学会主办、南京赛宁信息技术有限公司承办的“网络安全技能课堂-信息安全测试培训班”在网络安全卓越中心正式举…

完全免费!超好用的IDEA插件推荐:Apipost-Helper

Idea 是一款功能强大的集成开发环境&#xff08;IDE&#xff09;&#xff0c;它可以帮助开发人员更加高效地编写、调试和部署软件应用程序,Idea 还具有许多插件和扩展&#xff0c;可以根据开发人员的需要进行定制和扩展&#xff0c;从而提高开发效率,今天我们就来介绍一款国产的…

ceph的体系结构

文章目录 CephCeph的体系结构对象存储RADOSOSDOSD的状态osd状态检测 数据寻址file--->Object映射Object--->pg映射pg--->osd思考&#xff1a;为什么要在Object和osd之间增加一层pg的映射呢&#xff1f; 存储池monitormonitor与客户端的通信Monitor与osd的通信 数据操作…

7-爬虫-中间件和下载中间件(加代理,加请求头,加cookie)、scrapy集成selenium、源码去重规则(布隆过滤器)、分布式爬虫

0 持久化(pipelines.py)使用步骤 1 爬虫中间件和下载中间件 1.1 爬虫中间件(一般不用) 1.2 下载中间件&#xff08;代理&#xff0c;加请求头&#xff0c;加cookie&#xff09; 1.2.1 加请求头(加到请求对象中) 1.2.2 加cookie 1.2.3 加代理 2 scrapy集成selenium 3 源码去重…

【Transformer从零开始代码实现 pytoch版】(五)总架构类的实现

Transformer总架构 在实现完输入部分、编码器、解码器和输出部分之后&#xff0c;就可以封装各个部件为一个完整的实体类了。 【Transformer从零开始代码实现 pytoch版】&#xff08;一&#xff09;输入部件&#xff1a;embeddingpositionalEncoding 【Transformer从零开始代…

Power Automate-变量和excel表数据的应用

前提表格 Power Automate连接excel请参考&#xff1a;SharePoint-连接Excel-CSDN博客 需求1&#xff1a;计算表格中某列的和 添加操作&#xff0c;搜索变量&#xff0c;选择初始化变量 添加变量的名称、类型和初始值 再新增操作&#xff0c;搜索Excel&#xff0c;点击查看更多…

Kubernetes介绍和环境部署

文章目录 Kubernetes一、Kubernetes介绍1.Kubernetes简介2.Kubernetes概念3.Kubernetes功能4.Kubernetes工作原理5.kubernetes组件6.Kubernetes优缺点 二、Kubernetes环境部署环境基本配置1.所有节点安装docker2.所有节点安装kubeadm、kubelet、kubectl添加yum源containerd配置…

查询数据表格中的数据

1.创建这个表至少20个 1&#xff09;创建数据库&#xff1a;create database 四川信息职业技术; 2&#xff09;创建数据表 3&#xff09;插入数据&#xff08;第一条代码修改了一下手机号码的字段类型&#xff09; 2.统计表中的人数 如果你想根据某个特定的列来统计人数&…

Jenkins在Linux环境下的安装与配置

Jenkins是一个开源软件项目&#xff0c;是基于Java开发的一种持续集成&#xff08;CI&#xff09;工具&#xff0c;用于解决持续重复的部署、监控工作&#xff1b;它一个开放易用的软件平台&#xff0c;大大简化软件的持续集成。 安装Jenkins 1.使用docker安装 2.本地下载je…

Python数据结构:元组(Tuple)详解

1.介绍和基础操作 Python中的元组&#xff08;Tuple&#xff09;是不可变有序序列&#xff0c;可以容纳任意数据类型&#xff08;包括数字、字符串、布尔型、列表、字典等&#xff09;的元素&#xff0c;通常用圆括号() 包裹。与列表&#xff08;List&#xff09;类似&#xff…

[IJKPLAYER]基于DEMO分析IJKPLAYER(整理版本)

背景 博主主要是从事C语言开发&#xff0c;因此本文着重强调FFMPEG部分&#xff0c;关于JAVA应用和框架层只是一笔带过。IJKPLAYER的实质是对FFMPEG项目中的ffplayer程序进行的二次封装&#xff0c;通过JNI方式完成对外提供JAVA接口。 1.目录结构 activities:包含了demo的所有…

react函数式组件props形式父向子传参

父组件中定义 子组件中触发回调传值 import { useState } from "react"; function Son(params) {const [count, setCount] useState(0);function handleClick() {console.log(params, paramsparamsparamsparamsparamsparams);params.onClick(111)setCount(count 1…

多个微信快速同步发圈

做营销最重要的任务是什么&#xff1f; 毋庸置疑&#xff0c;就是发布朋友圈。 为什么要发圈呢&#xff1f; 现在社交媒体中&#xff0c;微信不管在生活上、工作上都是不可或缺的工具&#xff0c;而朋友圈是微信中社交场景之一&#xff0c;也是很多企业作为推广产品和服务的重…

腾讯云服务器多少钱一年?2023年腾讯云优惠云服务器推荐

作为一名程序员&#xff0c;技术的突飞猛进是从拥有第一台云服务器开始的。那时&#xff0c;我开始尝试使用Linux系统&#xff0c;并成功上线了自己的第一个小程序。自此之后&#xff0c;我和我的同事们都开始拥有自己的云服务器&#xff0c;用来搭建各种小项目或者好玩的东西。…

OpenAtom OpenHarmony三方库创建发布及安全隐私检测

OpenAtom OpenHarmony三方库&#xff08;以下简称“三方库”或“包”&#xff09;&#xff0c;是经过验证可在OpenHarmony系统上可重复使用的软件组件&#xff0c;可帮助开发者快速开发OpenHarmony应用。三方库根据其开发语言分为2种&#xff0c;一种是使用JavaScript和TypeScr…

wpf devexpress设置行和编辑器

如下教程示范如何计算行布局&#xff0c;特定的表格单元编辑器&#xff0c;和格式化显示值。这个教程基于前一个文章 选择行显示 GridControl为所有字段生成行和绑定数据源&#xff0c;如果AutoGenerateColumns 属性选择AddNew。添加行到GridControl精确显示为特别的几行设置。…

Containerd接入Harbor仓库

在使用容器时&#xff0c;避免不了会使用到私有仓库&#xff0c;一般都是采用 harbor 作为私有仓库&#xff0c;docker 对接 harbor 仓库非常简单&#xff0c;哪 containerd 如何对接 harbor 呢&#xff1f; 在内网使用 harbor 根据个人习惯&#xff0c;一般都是非 http 并且是…

【SpringBoot3+Vue3】一【基础篇】

目录 一、Spring Boot概述 1、Spring Boot 特性 1.1 起步依赖 1.2 自动配置 1.3 其他特性 1.3.1 内嵌的Tomcat、Jetty (无需部署WAR文件) 1.3.2 外部化配置 1.3.3 不需要XML配置(properties/yml) 二、Spring Boot入门 1、一个入门程序需求 2、步骤 2.1 创建Maven工…

智能配方颗粒管理系统解决方案,专业实现中医药产业数字化-亿发

“中药配方颗粒”&#xff0c;又被称为免煎中药&#xff0c;源自传统中药饮片&#xff0c;经过提取、分离、浓缩、干燥、制粒、包装等工艺加工而成。这种新型配方药物完整保留了原中药饮片的所有特性。既能满足医师的辨证论治和随症加减需求&#xff0c;同时具备强劲好人高效的…