java数据结构与算法刷题-----LeetCode70. 爬楼梯

数据结构100题 刷题记录 Python 25天,到9.25号 做完100题 Python 数据结构 100题 好多思想总结不是很清晰,希望有Uu一起做题一起讨论 阅读详情
java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完):https://blog.youkuaiyun.com/grd_java/article/details/123063846

很多人觉得动态规划很难,但它就是固定套路而已。其实动态规划只不过是将多余的步骤,提前放到dp数组中(就是一个数组,只不过大家都叫它dp),达到空间换时间的效果。它仅仅只是一种优化思路,因此它目前的境地和线性代数一样----虚假的难。

  1. 想想线性代数,在国外留学的学生大多数不觉得线性代数难理解。但是中国的学生学习线性代数时,完全摸不着头脑,一上来就是行列式和矩阵,根本不知道这玩意是干嘛的。
  2. 线性代数从根本上是在空间上研究向量,抽象上研究线性关系的学科。人家国外的教科书都是第一讲就帮助大家理解研究向量和线性关系。
  3. 反观国内的教材,直接把行列式搞到第一章。搞的国内的学生在学习线性代数的时候,只会觉得一知半解,觉得麻烦,完全不知道这玩意学来干什么。当苦尽甘来终于理解线性代数时干什么的时候,发现人家国外的教材第一节就把这玩意讲清楚了。你只会大骂我们国内这些教材,什么狗东西(以上是自己学完线性代数后的吐槽,我们同学无一例外都这么觉得)。

而我想告诉你,动态规划和线性代数一样,我学完了才知道,它不过就是研究空间换时间,提前将固定的重复操作规划到dp数组中,而不用暴力求解,从而让效率极大提升。

  1. 但是网上教动态规划的兄弟们,你直接给一个动态方程是怎么回事?和线性代数,一上来就教行列式和矩阵一样,纯属恶心人。我差不多做了30多道动态规划题目,才理解,动态方程只是一个步骤而已,而这已经浪费我很长时间了,我每道题都一知半解不理解,过程及其痛苦。最后只能重新做。
  2. 动态规划,一定是优先考虑重复操作与dp数组之间的关系,搞清楚后,再提出动态方程。而你们前面步骤省略了不讲,一上来给个方程,不是纯属扯淡吗?
  3. 我推荐研究动态规划题目,按5个步骤,从上到下依次来分析
  1. DP数组及下标含义
  2. 递推公式
  3. dp数组初始化
  4. 数组遍历顺序(双重循环及以上时,才考虑)
  5. dp数组打印,分析思路是否正确(相当于做完题,检查一下)

在这里插入图片描述

拿到比较抽象的题,先列出前几项结果,尝试看出问题的本质(很多比较抽象的题,本质都很简单,抓住问题的本质,那么可以做到解决1道题,扩展到解决一类问题)
  1. n = 0时:结果为0
  2. n = 1时:结果为1
  3. n = 2时:结果为2
  4. n = 3时:结果为3
  5. n = 4时:结果为5

可见 这道题的规律0 1 2 3 5… 和斐波那契数列的0 1 1 2 3 5…非常像

什么是斐波那契数列?
  1. 斐波那契数列:第一个值是0,第二个值是1,剩下的元素是它前两个元素和,例如:0 1 1 2 3 5… , 可见除了最开始的两个固定为0和1外,其余每一个元素都是前两个元素的和。
  2. 也就是说,这玩意一看就是固定的一套值,如果每次都重新生成,就太暴力了。
  3. 动态规划的思想就是,将生成的过程,就生成一次,之后再用,直接从dp数组中拿。从而大大提升效率
解题思路
  1. 暴力求解的思想,就是定义3个或者2个变量,然后累加,以获得指定位置的斐波那契数。每次都需要从头开始累加
  2. 但是如果我们预先将其存储到dp数组,就可以直接通过dp[x], 获取dp数组中指定位置x的对应斐波那契数,而不用每次都从头计算。
  3. 但是这道题,从第4个元素开始,才符合斐波那契数列的规则,因此我们这道题,可以用斐波那契数列思想,但不能照搬
  4. 可见这道题,前3个为固定值 0 1 2 ,剩下的都是当前元素的前两项的和。
动态规划思考5步曲
  1. DP数组及下标含义

DP数组存储我们分析的类似斐波那契数列的数列,这个数列是一维线性的,所以只需一维数组存储。下标代表数在数列中的位置。dp[0] = 0,dp[1] = 1,dp[2]=2是头三个固定值(斐波那契数列头两个是固定值),dp[3]开始,每个元素是前两个数组元素的和。即可生成对应数列的dp数组。

  1. 递推公式

既然知道了DP数组就是存储的类似斐波那契数列的数列,那么递推公式,很显然就是当前元素=前两个元素的和。F(n) = F(n-1)+F(n-2)。 而且F(0) = 0,F(1)=1,F(2) = 2这是这个数列的特性,前三个值固定为0,1,2.

  1. dp数组初始化

在这里插入图片描述

  1. 数组遍历顺序(因为这个数列是一维的,只需要一重循环,无需考虑这个)
  2. 打印dp数组(自己生成dp数组后,将dp数组输出看看,是否和自己预想的一样。)

在这里插入图片描述

代码

在这里插入图片描述

class Solution {
    public int climbStairs(int n) {
        int length = n>=3?n:3;//避免n给的太小,例如n < 3时,下面的dp[2] = 2; 这条代码会下标越界
        //初始化DP数组,一维数组即可,头3个元素固定为0,1,2
        int dp[] = new int[length+1]; dp[0] = 0; dp[1] = 1;dp[2]=2;
        //其余元素为它的前两个元素的和
        for(int i = 3;i<=n ; i++){
            dp[i] = dp[i-1]+dp[i-2];
        }
        return dp[n];
    }
}
LeetCode刷题第十二天(70. 爬楼梯) 文章目录题目描述方法一:动态规划算法思想JAVA代码复杂度分析方法二:矩阵快速幂算法思想JAVA代码复杂度分析方法三:通项公式算法思想JAVA代码复杂度分析 题目描述 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数。 示例 1: 输入: 2 输出: 2 解释: 有两种方法可以爬到楼顶。 1 阶 + 1 阶 2 阶 示例 2: 输入: 3 输出: 3 解释: 有三种方法可以爬到楼顶。 1 阶 + 1 阅读详情

相关推荐

电脑版微信多开,最详细教程没有之一

首先桌面任意的位置右键新建文本文档输入如下代码: TASKKILL /F/IM WECHAT.EXE start " " "D:\Program Files (x86)\Tencent\WeChat\WeChat.exe" start " " "D:\Program Files (x86)\Tencent\WeChat\WeChat.exe" ...

大超子 4393

【数据结构】【更新中】【python】leetcode刷题记录:热题100答案 + 每日一题(附文字说明)

题目为leetcode的热题100.仅作学习用,且题目为节选。

FQY__的博客 2423

怎样自己亲手搭建一个四比特加法器

如何用三极管搭建一个四比特加法器 一、前言 作为大一上学期第一个大作业,最终还是拖到了冬学期的第八周,从第七周的周六开始,一直到第八周周五上午课上展示,中间连续熬了好几天的夜,另外,白天凡是有时间都用在研究它了,最终大约是用了30个小时,完成了这个四比特加法器的“从零到一”。 最终,小组得分92,个人分数100(贡献比35%),也不枉自己投入的心血 二、器材 电阻 1 包(10kΩ×100,1kΩ×50) 三极管 1 包(9013×100,LED×6) 跳线 3 短 1.5 长 电源 1 个 USB 线

qq_34771124的博客 1万+

代码-刷题

代码练习网站:https://leetcode.com/ 贴代码神器: http://paste.ubuntu.com

leeham的博客 2391

Sinutrain下载安装与开启OPC UA---kalrry

Sinutrain 开启 OPC UA 本教程只适用于版本,其他版本配置目录有所改变建议安装到默认路径,否则后期修改路径时候容易忽略细节本教程提供安装包为官方包,网上有些非官方包安装后容易出现授权问题,比如授权管理器无法启动,官方技术会建议你重装系统,很多时候是因为安装包非官方包在首次安装前,建议重启一遍系统。

kalrry 1万+

《探秘 BME680温度湿度气压气体传感器模块:环境感知的卓越之选》:此文为AI自动生成

BME680 是一款由博世公司推出的集成环境传感器模块,在环境监测和物联网等领域中发挥着重要作用。它能够同时测量温度、湿度、气压和气体浓度等多个环境参数,为各种应用提供准确可靠的环境数据。该模块采用小巧的封装形式,便于集成到各种设备中,无论是智能家居、可穿戴设备还是工业监测系统,都能轻松适配。例如,在智能家居系统中,BME680 模块可以监测室内环境参数,如温度、湿度、气压和空气质量等。通过与智能家居控制器或智能手机应用程序的连接,用户可以实时了解室内环境状况,并根据需要进行调整。

zheng_ruiguo的专栏 1873

leetcode刷题记录——数据结构(入门)

数据结构leetcode

GZW18620285024的博客 846

风力发电机缺陷检测平台

风力发电机缺陷检测平台相关内容展示

weixin_39779415的博客 1111

java数据结构与算法刷题-----LeetCode70:爬楼梯

java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完):https://blog.csdn.net/grd_java/article/details/123063846 我的思考过程: 分析已知条件,试图寻找解题思路 一共n个台阶,每次可爬1或2个台阶 爬楼梯,不是1就是2 爬到最后,要不剩下0个台阶,表示爬完,要不剩下1个或两个,如果是1个,就只有爬一个台阶这一条选择。如果是两个,那么可以两次都走1...

殷志鹏的博客 495

本地部署大模型框架 LMStudio和Ollama+WebUI对比

之前我们的辣妈系列文章介绍了很多如何使用Ollama框架+OpenWebUI做很多大模型框架下相关的事情。之后我们也尝试了LMStudio这样一体化的工具。本文介绍下LMStudio 和 Ollama+Web UI 各有优劣,具体选择取决于你的需求。

ms44的专栏 4030

Linux Kernel入门到精通系列讲解 - 总目录

在学习Linux Kernel之前,需要先准备开发环境,方便后续进行开发。可以根据自身情况,选择性阅读该章节。学习该章节之前,你应该了解一下网络概念,明白为什么要讲这些,才能更有方向的去理解学习。Linux ARM平台开发系列讲解(设备树篇) 4.1.1 设备树的原理详解。本项目完全开源,仅供学习使用,如需其他用途,请与本人联系。),本章节你可以学习到。摄像头V4L2子系统、Linux kernel常用的子系统等,ARM架构、RISCV架构、Uboot等。

DSMGUOGUO的博客 1万+

[C++]Leetcode超高效刷题顺序及题目详解笔记(持续更新中)

一.引言 博主最近在LeetCode上用C++练习。一路走来踩过一些坑,做了一些总结和笔记,分享给需要的人。 LeetCode网址:https://leetcode.com/ LeetCode中文版:https://leetcode-cn.com/ 二.刷题指南 LeetCode 是一个非常棒的平台,收集了许多公司的面试题目。相对其他平台而言,有着下面的几个优点: 题目全部来自业内大公司的真实面试不用处理输入输出 精力全放在解决具体问题上题目有丰富的讨论 可以参考别人的思路精确了解自己代码在所有提交代码中

cpb____的博客 2万+

【swjtu】算法实验2.4分析算法时间复杂度

分析给定算法的时间复杂度。 上机实验,绘制不同输入情况下的运行时间曲线,并与(1)中的分析结果进行比较。 撰写相应的实验报告,实验报告内容包括:实验目的、实验任务、 实验环境、实验步骤、实验结果及其分析以及实验总结等部分内容。

qq_52046937的博客 733

LeetCode刷题汇总

剑指offer 剑指 Offer 03 数组中重复的数字 剑指 Offer 04 二维数组中的查找 剑指 Offer 05 替换空格 剑指 Offer 06 从尾到头打印链表 剑指 Offer 07 重建二叉树 剑指 Offer 09 用两个栈实现队列 剑指 Offer 10- I 斐波那契数列 剑指 Offer 10- II 青蛙跳台阶问题 剑指 Offer 11 旋转数组的最小数字 剑指 Offer 12 矩阵中的路径 剑指 Offer 13 机器人的运动范围 剑指 Offer 14- I 剪绳子 剑指

weixin_44171872的博客 2万+

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

力扣刷题路线

结合高频题、经典题和算法思想学习建议,分阶段从基础到进阶编排,覆盖所有核心标签,并标注题号与学习方法。:画图模拟快慢指针移动,如移动零时快指针探路、慢指针标记非零位置。:括号生成时,左括号数不能超过n,右括号数不能超过左括号数。:LCA问题中,若左右子树均含目标节点,则当前节点为祖先。:终止条件、递归调用、返回值,如二叉树深度递归返回。:掌握虚拟头节点、递归反转、环形检测。:掌握索引操作、快慢指针、滑动窗口。:熟悉括号匹配、单调栈、层序遍历。:熟悉反转、哈希统计、回文处理。

FAQEW的博客 1819

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

LeetCode 70 - 爬楼梯

本文介绍了LeetCode第70题“爬楼梯”的解题方法。题目要求计算爬到n阶楼梯的不同方法数,每次可以爬1或2阶。核心思路是将问题转化为斐波那契数列问题,通过动态规划求解。文章详细讲解了三种解法:基础动态规划(O(n)空间)、空间优化动态规划(O(1)空间)和矩阵快速幂(O(log n)时间)。提供了Python、Java和Rust的代码实现,并总结了动态规划的关键点、易错点和优化方向。该问题帮助理解状态转移和空间优化技巧,是动态规划的经典入门题目。

weixin_45980775的博客 1445

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

leetcode刷题记录

刷题过程记录

洪肥肥的博客 2063

LeetCode 热题 HOT 100 Java题解——70. 爬楼梯

LeetCode 热题 HOT 100 Java题解70. 爬楼梯动态规划复杂度分析 70. 爬楼梯 题目: 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 注意: 给定 n 是一个正整数。 示例: 输入: 2 输出: 2 解释: 有两种方法可以爬到楼顶。 1. 1 阶 + 1 阶 2. 2 阶 动态规划 当前第iii个台阶的跳法要么是第i−2i-2i−2个台阶以下跳2个台阶跳过来,要么就是第i−1i-1i−1个台阶跳一步跳过来,

qq_20067165的博客 249

力扣刷题70.爬楼梯(java)

题目 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数。 示例 1: 输入: 2 输出: 2 解释: 有两种方法可以爬到楼顶。 1. 1 阶 + 1 阶 2. 2 阶 示例 2: 输入: 3 输出: 3 解释: 有三种方法可以爬到楼顶。 4. 1 阶 + 1 阶 + 1 阶 5. 1 阶 ...

菜不是原罪 328

LeetCode热题100:算法面试通关秘籍与高效刷题指南

算法与数据结构是计算机科学的核心基础,其原理与应用贯穿于软件开发的全生命周期。通过哈希表实现O(1)时间复杂度查询、利用动态规划优化重复计算,这些经典算法思想在系统设计和大数据处理中具有重要价值。LeetCode热题100作为技术面试的高频考点集合,覆盖了数组操作、字符串处理、树形结构等常见场景,特别适合准备FAANG等顶级科技公司面试的开发者。掌握DFS/BFS遍历、双指针技巧等解题模板,不仅能提升编码能力,更能培养工程实践中的算法思维。本文以两数之和、爬楼梯等典型问题为例,详解如何通过分阶段训练和模拟面

weixin_34372728的博客 329

【leetcode】70.爬楼梯(动态规划,数学法,开阔思路,java实现)

70. 爬楼梯 难度简单 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? **注意:**给定 n 是一个正整数。 示例 1: 输入: 2 输出: 2 解释: 有两种方法可以爬到楼顶。 1. 1 阶 + 1 阶 2. 2 阶 示例 2: 输入: 3 输出: 3 解释: 有三种方法可以爬到楼顶。 1. 1 阶 + 1 阶 + 1 阶 2. 1 阶 + 2 阶 3. 2 阶 + 1 阶 方法一:动态规划 思路和算法 我们用 f(

Viper的程序员修炼手册 1495

可爱宝宝力扣刷题集目录

阿勒八叉

zhuruihe2014的博客 941

leetcode刷题日记[day-03]-哈希-70. 爬楼梯

题目链接:https://leetcode.cn/problems/climbing-stairs/参考链接:https://www.bilibili.com/video/BV1uu411e743?

weixin_51688377的博客 464

LeetCode(70):爬楼梯 Climbing Stairs(Java)

2019.7.16 #程序员笔试必备# LeetCode 从零单刷个人笔记整理(持续更新) 出差去海南招生三周,今天又要重新开启学习和科研生活了呀~ 斐波那契数列题,具体解析可以参考之前《剑指Offer》刷过的三道题: #数据结构与算法学习笔记#剑指Offer7:斐波那契数列的四种编程实现方法 + 测试用例(Java、C/C++) #数据结构与算法学习笔记#剑指Offer8:普通青蛙跳台阶+变态...

NJU_ChopinXBP的博客 314

leetcode 台阶_LeetCode刷题实战70:爬楼梯

算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !今天和大家聊的问题叫做爬楼梯,我们先来看题面:https://leetcode-cn.com/problems/climbing-stairs/You are climbing a stair cas...

weixin_29015127的博客 118

力扣刷题笔记:「LeetCode」61 - 70题详解

61. 旋转链表 给定一个链表,旋转链表,将链表每个节点向右移动k个位置,其中k是非负数。 示例 1: 输入: 1->2->3->4->5->NULL, k = 2 输出: 4->5->1->2->3->NULL 解释: 向右旋转 1 步: 5->1->2->3->4->NULL 向右旋转 2 步: 4->5->1->2->3->NULL 示例 2: 输入: 0-&...

weixin_50205273的博客 623
上一篇: java数据结构与算法刷题-----LeetCode509. 斐波那契数
下一篇: java数据结构与算法刷题-----LeetCode746. 使用最小花费爬楼梯
ydenergy_殷志鹏
博客等级 码龄7年 5887粉丝 543原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ydenergy_殷志鹏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值