Leetcode爬楼梯算法与分析

告别系统迁移蓝屏!用Intel RST驱动搞定11代酷睿装Win11的硬盘识别难题 本文详细介绍了如何通过Intel RST驱动解决11代酷睿处理器在安装Win11时遇到的硬盘识别问题。针对VMD技术导致的系统迁移蓝屏错误,提供了从驱动下载、PE环境创建到驱动注入的完整解决方案,帮助用户顺利完成系统升级或迁移。 阅读详情

@Leetcode爬楼梯

上楼梯经典问题,解法可谓是千奇百怪,但是几个最为人所熟知的方法还是依旧十分基础,说起来更是朗朗上口。不多说了,请看题干:

假设你正在爬楼梯。需要 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 阶

首先来到最为经典以及知名度最高的动态规划思路,请看代码:

class Solution {
public:
    int climbStairs(int n) {
        if(n==1)
            return 1;
        if(n==2)
            return 2;
        int dp[n];
        dp[0]=1;
        dp[1]=2;
        int ans=dp[1];
        for(int i=2;i<=n-1;i++){
                dp[i]=dp[i-2]+dp[i-1];
                ans=dp[i];
        }
        return ans;
    }
};

在这里插入图片描述
毫不夸张地说,不管你在哪一本书中学习爬楼梯的问题,第一个介绍的必然是动态规划(俗称dp)算法。本题有一个非常关键的思路,希望大家能够发现:上第I级台阶的方法总共有两大种,第一种是从第(i-1)级台阶上跨一级,第二种则是从第(I-2)级台阶上跨两级,除此并无他法,由于这个上楼方法从(i-1)和(i-2)级各只有一种方法,那么上第i级台阶的总的方法和数就是上前两级台阶的方法总和数于是我们很快以此推出了动态规划的关系式,递推即可得到上面的代码。当然,要注意的是,使用动态规划法是无法在循环中判断最前两个台阶的,需要特判语句哦。

看完了上面的方法,细心的小白肯定发现了,诶,前两个数相加等于后两个数,这不是斐波那契数列吗?方法二就应运而生,请看代码:

class Solution {
public:
    int climbStairs(int n) {
        if(n==1)
            return 1;
        int first=1;
        int second=2;
        int third;
        for(int i=3;i<=n;i++){
                third=second+first;
                 first=second;
                 second=third;
        }
        return second;
    }
};

在这里插入图片描述
咋一看两份代码几乎一样嘛,实际上还是有不小的区别的。动态规划算法中创建了一个dp数组,存储了在抵达第n级台阶之前每级台阶的抵达时的方法,牺牲空间,超额完成了任务;斐波那契数列法则十分务实,每次计算都会更新数值,之前的数都会被覆盖,只能得到最后的答案,但是好处在开空间时只开了单个变量的空间并重复使用,节省了很多的空间。斐波那契数列数列的原理是第一个数+第二个数=第三个数,并且可以类推。时间复杂度上两者本应基本相同,但执行差异如此之大,也是有趣。

写到这里本已可以收笔,毕竟作为一个小白,会这两种方法,已经足够了,但只写这两种方法,你就只能是一个小白,于是笔者啥也不懂,鼓起勇气看了看大佬们的解法。来自大佬zzuliuwenbin的方法排列组合
链接:https://leetcode-cn.com/problems/two-sum/solution/pai-lie-zu-he-de-fang-shi-qiu-jie-by-zzuliuwenbin/
截取了这位老哥的思路,望各位看官好生鉴赏,请看方法三代码:

public class ClimbStairs {
    //排列组合公式计算,如果可以优化到o(1)时间内计算出来组合数,算法应该还算挺快
 public int C(int a,int b) {
  long t1 = 1, t2 = 1;
  for(int i=b,j=1;i>b-a;i--) {
   t1 = t1*i;t2 = t2*j;j++;
   if(t1%t2==0) {//计算到结尾再求结果会溢出,t1如果用int,在第43个测试用例时依旧溢出了
    t1 = t1/t2;
    t2 = 1;
   }
  }
  return (int)(t1/t2);
 }
 public int climbStairs(int n) {
  int sum = 0;
  for(int i=0;i<=n/2;i++) {
   if(i>(n-i)/2) {//利用组合公式的特点减少计算量
    sum = sum + C(n-2*i,n-i);
   }else {
    sum = sum + C(i,n-i);
   }
  }
        return sum;
    }
};

这个方法在大佬本人的描述中有2个核心思想:
1、n个台阶,一次走两个台阶的地方最多有n/2个;
2、假如某种可能里面包含i个一次走两个台阶的走法,那么这种走法就是在n-i步里面找到i个一次走俩台阶的,用组合公式C(i,n-i);
最后把所有i的取值的情况加起来,就能得到最终的方法个数。思路看上去比较简单,但代码编写并不容易,大佬多处注释也减少了小白们的压力,希望大家能有收获。

【软考】高项论文写作常见模板 本文主要介绍了YYYY年MM月DD日,我所在公司承接了XXXX项目的建设过程,包括了XXX,XXX,XXX内容,涉及到XXX,XXX,XXX技术。本人在项目中承载着项目经理的角色,主要负责了XXX,XXX,XXX方面事宜。此项目时间紧,任务重,实施过程中,我们特别注重了1、XXX 2、XXX 3、XXX几个方面,经过团队的一致努力,本项目按时交付,运行至今,客户反馈良好。但是在实施过程中,也曝露除了一些问题,包括了XXX,XXX等,通过应急处理和协调,这些问题都得到了妥善解决,没有影响到项目进度。 阅读详情

相关推荐

Visual Studio 2015 插件开发 从入门到放弃(一)

必需知识:C#和Visual Studio (1)安装 Visual Studio 2015 的时候选择 Visual Studio 扩展性工具(Visual Studio Extensibility Tools)。对于已经安装好 Visual Studio 2015 的小伙伴,可以找VS2015的安装包,或者在程序与功能中找VS2015双击,在VS2015界面中选择 修改,再选择

AncientPeople的博客 2万+

【LeetCode-简单】70. 爬楼梯(详解)

java:动态规划、排列组合法

丨康有为丨的博客 1618

Windows下QT5.15.2安装MQTT模块全攻略(附分支选择避坑指南)

本文详细介绍了在Windows环境下为QT5.15.2安装MQTT模块的完整流程,包括环境准备、源码获取、编译配置及项目集成等关键步骤。特别针对分支选择、依赖项处理和常见错误提供了实用解决方案,帮助开发者高效完成MQTT模块的安装与调试,适用于物联网开发场景。

weixin_29224589的博客 466

【晴问算法】入门篇—递归—上楼

我身轻如燕,所以每次都可以选择上一级台阶或者两级台阶。一个正整数n(1≤n≤25),表示台阶级数。我打算走楼梯上楼,共有n级台阶。一个正整数,表示上楼的方案数。1.一级 ->一级 ->一级。问有多少种上楼的方式。

weixin_59725175的博客 412

别再为模糊的3D重建头疼了!手把手教你用3DSlicer处理DICOM数据,搞定医学影像三维可视化

本文详细解析了医学影像三维重建中常见的模糊问题,并手把手教你使用3DSlicer处理DICOM数据,实现精准的三维可视化。从层厚设置到数据格式转换,再到重建算法选择和渲染参数微调,提供了一套完整的优化方案,特别适合临床医生和医学影像处理人员提升工作效率。

weixin_28693447的博客 248

H3C交换机命令大全,分模块好记忆!

在深入命令之前,我们先来了解H3C交换机的命令行基础。<H3C>[H3C]常用基础命令如下:这些基础命令是操作H3C交换机的敲门砖,熟练掌握后,我们将按模块深入探讨更具体的配置命令。H3C交换机的命令可以按功能模块分类,包括系统管理、接口配置、VLAN操作、链路聚合、路由配置、安全管理等。

网络技术联盟站 782

算法之爬梯子

题目: 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数。 解析: 我们用 f(x)f(x) 表示爬到第 xx 级台阶的方案数,考虑最后一步可能跨了一级台阶,也可能跨了两级台阶,所以我们可以列出如下式子: f(x)=f(x−1)+f(x−2) 它意味着爬到第 xx 级台阶的方案数是爬到第 x - 1级台阶的方案数和爬到第 x - 2级台阶的方案数的和。很好理解,因为每次只能爬 1 级或 2 级,所以 f

程序员小祝的博客 791

复现《水化硅铝酸钙微结构和性能的分子动力学模拟研究》的分子动力学模拟

本文详细复现了杨军博士论文中关于水化硅铝酸钙(C-A-S-H)凝胶的分子动力学模拟方法。研究内容包括:1)基于11Å Tobermorite构建C-A-S-H分子模型,通过缺陷引入和Al掺杂调节Ca/Si比;2)使用ReaxFF力场模拟交联C-A-S-H的结构与力学性能;3)采用ClayFF力场研究纳米孔道中水和离子传输行为。研究提供了完整的LAMMPS输入脚本、Python分析代码和力场参数设置,为水泥基材料纳米尺度模拟提供可复现的技术方案。

huanghm88的专栏 106

Leetcode——爬楼梯(最详细!)

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

IT荻的博客 4457

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

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

qq_52046937的博客 731

【AI智能体】飞书 AI 智能客服机器人搭建与使用实战操作详解

飞书 AI 智能客服机器人搭建与使用实战操作详解

congge 6053

leetcode:70. 爬楼梯

动态规划

OceanStar的博客 3701

需要Perfetto分析的anr

anr类的问题,经常会有系统cpu,内存负载不高,iowait也不高,主线程状正常的,这类问题通过常规的日志无法分析,需要抓取Perfetto来分析应用的情况。event log中也没有异常。

专业开发者的博客,一个从事Android WiFi和蓝牙的工程师 63

LeetCode算法入门 爬楼梯 解法与分析

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

Cypress的小屋 303

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

算法45:动态规划专练(力扣70: 爬楼梯 力扣746:使用最小花费爬楼梯)

动态规划

街头小瘪三的专栏 1309

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

【学会动态规划】使用最小花费爬楼梯(3)

746. 使用最小花费爬楼梯

Locky136的博客 303

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

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

算法(LeetCode_70_爬楼梯)

算法 概:这题在LeetCode上是一个简单难度的题,但是有一说一,我思考了有些时间才做出来,所以简单记录一下 来源 : LeetCode 链接:爬楼梯 题目 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数。 示例 示例 1: 输入: 2 输出: 2 解释: 有两种方法可以爬到楼顶。 1 阶 + 1 阶 2 阶 示例 2: 输入: 3 输出: 3 解释: 有三种方法可以爬到楼顶。 4. 1 阶 + 1

诡白丷的博客 224

Leetcode动态规划【简单题】

文章目录Leetcode动态规划【简单题】53. 最大子序和题目描述思路分析复杂度分析70.爬楼梯题目描述思路分析复杂度分析121.买卖股票的最佳时机题目描述思路分析复杂度分析303.区域和检索-数组不可变题目描述思路分析复杂度分析 Leetcode动态规划【简单题】 动态规划(Dynamic programming,简称DP),是一种把原问题分解为相对简单的子问题的方式求解复杂问题的方法。动态规...

天乔巴夏丶 336

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. 爬楼梯(递归、动态规划、斐波那契数列)

力扣70. 爬楼梯 https://leetcode-cn.com/problems/climbing-stairs/ 假设你正在爬楼梯。需要 n阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数。 示例 1: 输入: 2 输出: 2 解释: 有两种方法可以爬到楼顶。 1. 1 阶 + 1 阶 2. 2 阶 示...

小麦China的博客 730

力扣爬楼梯问题

我觉得本质上是一样的,但是斐波那契数列是 f (0)=0、f (1)=1、f (2)=1、f (3)=2、f (4)=3... 而本题是 f (1)=1、f (2)=2、f (3)=3、f (4)=5... 只是起始值不同,递推公式完全一样。从前面的规律能直接看出来:要到第 i 阶,只能从 i-1 阶爬 1 阶,或者从 i-2 阶爬 2 阶。原来规律就是:每个数等于前两个数的和,即斐波那契数列,不过斐波那契数列通常从 f (0)=0、f (1)=1 开始,而这里从 f (1)=1、f (2)=2 开始。

2501_94581422的博客 320

力扣 70.爬楼梯

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

宫浩然的博客 351

【每日算法C#】爬楼梯问题 LeetCode

关键点解析 动态规划思想:状态定义:状态转移方程:基础情况: 空间优化(O(1)空间): 动态规划(Dynamic Programming) 动态规划(Dynamic Programming,简称DP)是一种解决复杂问题的算法思想,其核心理念可概括为以下五个关键点:

玉夏的博客 427

70. 爬楼梯

你有多少种不同的方法可以爬到楼顶呢?3、不用递归,多用一个数组空间复杂度增加。

用来自己学习,复习 405

leetcode 70. 爬楼梯

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

qq_33789406的博客 105

代码随想录算法训练营第二十八天 | 动态规划理论基础、LeetCode509.斐波那契数、LeetCode70.爬楼梯、LeetCode746.使用最少花费爬楼梯

我的上面思路是递归,动态规划和递归是两个范畴的概念,前者是拆分问题,利用子问题的解,得到原始问题的解,递归属于程序设计领域,其含义是程序调用自身,动态规划可以通过递归实现,也可以通过填表实现,为了优化程序运行的效率,填表比较好(等价于递归加缓存)个台阶向上爬需要支付的费用。一旦你支付此费用,即可选择向上爬一个或者两个台阶。开始,后面的每一项数字都是前面两项数字的和。:动态规划中每一个状态一定是由上一个状态推导出来的,:和录哥思路一致,没有纠结于i=0的情况的初始化。你有多少种不同的方法可以爬到楼顶呢?

zhuabazhuabahuo的博客 1113
上一篇: Leetcodex的平方根算法与分析
下一篇: Leetcode删除排序链表中的重复元素算法与分析
Maple_PI
博客等级 码龄7年 3粉丝 34原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值