Climbing Stairs(爬楼梯 Leetcode 第70题,最优解法)

YOLOv11改进策略【损失函数篇】| 通过辅助边界框计算IoU提升检测效果(Inner_GIoU、Inner_DIoU、Inner_CIoU、Inner_EIoU、Inner_SIoU) 为了弥补现有 IoU 损失在不同检测任务中泛化性弱和收敛速度慢的问题,·Inner-IoU·通过引入比例因子 “ratio” 来控制辅助边界框的尺度大小,利用不同尺度的辅助边界框来计算损失,从而加速边界框回归过程。 阅读详情

解法# 英文原题

You are climbing a stair case. It takes n steps to reach to the top.
Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top?
Note: Given n will be a positive integer.

Example 1: Input: 2 ; Output: 2
Explanation: There are two ways to climb to the top.

  1. 1 step + 1 step
  2. 2 steps

Example 2: Input: 3 ; Output: 3;
Explanation: There are three ways to climb to the top.

  1. 1 step + 1 step + 1 step
  2. 1 step + 2 steps
  3. 2 steps + 1 step

中文题目

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

##首先想到的解法
看到这道题目我首先想到的是一个递推的过程,
假设当前楼梯是n ;当前楼梯有多少爬法 使用 f(n)表示.
要知道当前楼梯f(n)的爬法,只需要知道前一个楼梯的爬法f(n-1),和前一阶楼梯的爬法f(n-2)

因为f(n-1)再爬一步就是 f(n)
f(n-2) 一次两步就是 f(n)

f(n) 的楼梯爬法只有这两种可能
f(n)=f(n-1)+f(n-2)
于是我就想到了递归

下面是第一中解法(C语言版)

int climbStairs(int n) 
{
    if( n <= 2)
    {
        return n;
    }
    else
    {
        return climbStairs(n-1)+climbStairs(n-2);
    }
    
}

其他细节 由于**给定 n 是一个正整数。**所以不用考虑0 的情况

很遗憾这个做法,没能通过leetcode测试,提示的是超时, 45个用例,过了21个.说明程序本身的递推是没有问题的,程序的执行效率和环境上就要再考虑考虑了. 看到博客里面有人真就是以同样的思路做的,参考爬楼梯,而且还AC了,估计不是在leetcode上面做的,而且测试用例中输入的N比较小
至于超时得到原因是,这里使用了递归,递归会保存调用栈,一旦给的n比较大,就会造成栈击穿,从而出现错误.

优化方法二

将递归转换为循环

int climbStairs(int n) 
{
    int i =0;
    int  ret =0 ;
    int * arr = (int *)malloc((n+1)*sizeof(int));
    
    for ( i=0; i<=n; i++)
    {
        if(i <3)
        {
            arr[i]=i;
        }
        else
        {
            arr[i]=arr[i-1]+arr[i-2];
        }
    }
    
    ret = arr[n];
    free(arr);
    arr=NULL;
    return ret;
}

这个方法,可以通过leetcode 测试,但是N比较大的时候,还是会耗费很多堆内存,实际上每个递推过程中只和三级台阶相关,所以还可以继续优化

优化方式三

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

    return arr[n%3];
}

不用申请堆内存,而且栈内存只用了 3个int类型,循环存放递推的结果,大大提高了效率.

最快的方法 (以空间换取时间)

int climbStairs(int n) 
{ 
	if(n <1)
	{
		return 1;
	}else if( n < 47)
	{
    	int arr[47]={1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368,75025,121393,196418,317811,514229,832040,1346269,2178309,3524578,5702887,9227465,14930352,24157817,39088169,63245986,102334155,165580141,267914296,433494437,701408733,1134903170,1836311903,2971215073};
    }else{
   		 return -1; //整数翻转
    }

}
SAP S/4HANA 中 RAP 业务对象接口的消费模式 本文探讨了SAP S/4HANA中RAP业务对象接口的消费模式,重点介绍了通过EML直接调用和CDS投影两种Clean Core开发路径。文章分析了BO Interface作为稳定契约的价值,并提供了BAdI集成、OData服务发布等实际场景案例,同时对比了OData V2/V4的技术选型考量,最后强调了ADT向导使用中的DCL权限注意事项。全文旨在帮助开发者构建升级友好的业务对象消费方案。 阅读详情

相关推荐

INS/伪距组合导航(2)

伪距惯导组合导航

u014430081的博客 827

算法:Climbing Stairs(爬楼梯) 6种解法

说明 算法:Climbing Stairs(爬楼梯) LeetCode地址:https://leetcode.com/problems/climbing-stairs/ 题目: You are climbing a stair case. It takes n steps to reach to the top. Each time you can either climb 1 or 2 step...

AI架构师易筋 1万+

避开这些坑!baostock获取股票数据时最容易犯的5个错误(Python实战)

本文针对使用Python和baostock库获取股票历史数据时常见的五大陷阱,提供了实战解决方案。重点剖析了登录状态验证、参数配置、数据解析、批量操作效率及数据一致性校验等关键环节,帮助开发者构建稳健高效的数据获取流程,避免因细节疏忽导致的数据错误或性能瓶颈。

websocket5live的博客 1439

leetcode 70. 爬楼梯(C语言)

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

寒泉 1005

什么是Merkle树?用“文件柜”类比理解区块链的核心技术

Merkle树是一种用于区块链的数据结构,像一个高效的“文件柜”,用于存储和验证大量交易数据。比特币通过Merkle树将交易哈希组织成树状结构,层层汇总,最终生成一个唯一的根哈希,存储在区块头中。这种设计大幅减少数据存储和验证成本,支持快速校验交易的完整性和存在性。Merkle树通过密码学保证数据不可篡改,广泛应用于比特币、区块链及其他分布式系统。它的优势在于高效、轻量和安全,尤其适合轻节点验证和数据同步。理解Merkle树就像掌握区块链的“索引秘籍”,是Web3世界的关键技术。

在路上的专栏 1192

Starlink第三代终端和第二代终端的差异性有哪些?

starlink第三代终端和第二代终端的额差异

chen2jiang3的博客 2924

C语言入门算法——爬楼梯(了解动态规划)

了解动态规划,减小运行时间,在题目越来越难的情况下,原本的暴力手段已经不足以解决问题,只有通过学习不同的算法才能完成更高难度的题目,以下是本次总结。

yandadzf的博客 2824

57、振荡扫描仪的挠性枢轴:原理、设计与材料选择

本文深入探讨了振荡扫描仪中挠性枢轴的工作原理、设计方法与材料选择。挠性枢轴因其无润滑、高精度、低周期性误差和潜在无限寿命等优势,广泛应用于光学、太空、医学和半导体等领域。文章分析了其在小角度下的优异性能与无法连续旋转等局限性,提供了关键设计公式,并对比了多种挠性材料的性能指标。同时,结合不同应用场景提出设计优化策略,并展望了微型化、智能化和高性能材料等未来发展趋势,为工程实践提供了系统的设计流程与选型建议。

numpy6sculptor的博客 95

Algorithms—70.Climbing Stairs

思路:爬n阶台阶,有2种方法,先爬n-1阶,或者先爬n-2阶。n=1时,只有1种,n=2时有2种。递归计算 public class Solution { public int climbStairs(int n) { if (n<=2) { return n; }else { int[] sk=new int[n]; sk[0]=1; sk[

徐玄清的专栏 366

vue2/3 - element表格组件el-table实现懒加载树型(上下级)数据、默认展开和隐藏层级,支持对表格进行修改|新增|删除,解决完成操作后树节点不刷新问题(提供示例代码,一键复制开箱即用

vue2,vue3,elementui,elementPlus,el-table,Table表格组件,表格懒加载数据,element table表格数中的树形结构懒加载,增加后数据不同步更新问题,el-table树形与el-tree树形结构的一键折叠与展开,elementui中el-tree懒加载数据 默认展开最外层节点,Element-plus Table组件树表结构默认展开一级目录,vue实现element table表格树形结构-使用懒加载时-解决子节点增删改后,不刷新子节点数据问题,解决el-tre

✅ 精选推荐文章 1万+

【好物推荐】MQTTX 快速入门使用指南

摘要:MQTTX是一款跨平台MQTT客户端工具,支持MQTT 5.0/3.1.1协议,提供桌面版、网页版和CLI版本。本文介绍了快速入门指南,包括下载安装、核心概念解释、连接公共MQTT服务器(broker.emqx.io)的步骤,以及订阅主题、发布和接收消息的操作流程。文章还提供了常见问题排查方法,帮助用户快速完成MQTT开发调试的基本操作。

奶爸的编程之路,也就一周冷个三天 855

【LeetCode-面试算法经典-Java实现】【073-Climbing Stairs(爬楼梯)】

【070-Climbing Stairs(爬楼梯)】【LeetCode-面试算法经典-Java实现】【所有题目目录索引】原题  You are climbing a stair case. It takes n steps to reach to the top.   Each time you can either climb 1 or 2 steps. In how many distinct

https://github.com/Wang-Jun-Chao 5414

具身智能:原理、算法与系统 第16章 运动控制基础

实时迭代(Real-Time Iteration, RTI)策略在每个采样时刻执行有限次迭代(通常一次),利用相邻时刻解的连续性,在严格时间限制内获得可行解。比例-积分-微分(Proportional-Integral-Derivative, PID)控制是工业界最广泛应用的控制策略,其原理基于误差的当前值(比例)、累积值(积分)与变化率(微分)的线性组合。力-位置混合控制(Hybrid Force/Position Control)将任务空间分解为力控制子空间与位置控制子空间,分别控制。

VectorShift的博客 143

力扣第 70 题:爬楼梯问题(Climbing Stairs)

定义dpidp[i]dpi表示爬到第iii级台阶的方法数。通过递归结合记忆化存储,成功解决了爬楼梯问题。避免了重复计算,性能优于纯递归。逻辑清晰,容易理解。如果对递归不熟悉,也可以通过迭代法或动态规划表实现,进一步优化空间复杂度。有关更多动态规划问题,欢迎继续关注!

weixin_48941116的博客 1538

老版QQ原生表情gif动态

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

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

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

LeetCode 70. Climbing Stairs 爬楼梯:动态规划与斐波那契数列的 Go 实现解析

本文围绕 LeetCode 第 70 题「爬楼梯」(Climbing Stairs)展开,完整讲解题目的递推建模、状态转移方程,并结合开源仓库 LeetCode-Go 中 leetcode/0070.Climbing-Stairs/70. Climbing Stairs.go 的源码逐行剖析其动态规划实现。读完本文,你将掌握爬楼梯问题的经典 DP 解法、复杂度分析与空间优化思路,并能通过仓库自带的

gitblog_01131的博客 900

IEM模型,地表粗糙度模拟

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

【LeetCode】70. Climbing Stairs 解题报告(Python)

【LeetCode】70. Climbing Stairs 解题报告(Python)题目描述解法:动态规划 题目地址:https://leetcode.com/problems/climbing-stairs/submissions/ 题目描述 You are climbing a stair case. It takes n steps to reach to the top. Each tim...

ttinch的博客 349

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

LeetCode 70. Climbing Stairs 题解

本题是动态规划的经典应用问题,主要考察对动态规划思想的理解和使用。通过使用动态规划,我们可以高效地计算爬到楼顶的不同方法数。动态规划的核心思想是:对于第i阶,有两种方法可以到达,因此。这种方法不仅适用于爬楼梯问题,还可以应用于许多其他类似的问题,例如斐波那契数列。掌握动态规划的思想,对于解决这类问题非常重要。

cannonjinx的博客 4170

leetcode python3 简单题70. Climbing Stairs

1.编辑器 我使用的是win10+vscode+leetcode+python3 环境配置参见我的博客: 链接 2.第七十题 (1)题目 英文: You are climbing a stair case. It takes n steps to reach to the top. Each time you can either climb 1 or 2 steps. In how many d...

从此做一个俗人 256

LeetCode70. Climbing Stairs 爬楼梯 JAVA实现

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

帽帽的博客 2517

Leetcode 70. Climbing Stairs 爬楼梯

Leetcode 70. Climbing Stairs 爬楼梯70. Climbing Stairs 爬楼梯题目描述示例:解答代码 70. Climbing Stairs 爬楼梯 题目描述 You are climbing a stair case. It takes n steps to reach to the top. Each time you can either climb 1 or...

importsys的博客 463

LeetCode 70. 爬楼梯(Climbing Stairs)

该题是斐波那契数列变种动态规划的基础题目,经典入门题可作为多种动态规划变体问题(如跳台阶、解码方法、打家劫舍等)的基础。

2501_91641025的博客 593

[LeetCode]70. Climbing Stairs

70. Climbing Stairs 一、题目 Problem Description: You are climbing a staircase. It takes n steps to reach the top. Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top? Example 1: Input: n = 2 Output: 2 Explanation: T

KKKKKKOBE_24的博客 384

[LeetCode] 70. Climbing Stairs

原题链接: https://leetcode.com/problems/climbing-stairs/ 1. 题目描述 You are climbing a stair case. It takes n steps to reach to the top. Each time you can either climb 1 or 2 steps. In how many distinct ways...

Ber03的博客 176

【Leetcode】70. 爬楼梯(Climbing Stairs)

Leetcode - 70 Climbing Stairs (Easy) 题目描述:共有 n 个台阶,每次只能往上爬 1 个或者 2 个台阶,求爬 n 个台阶共有几种不同的爬法。 Input: 2 Output: 2 Explanation: There are two ways to climb to the top. 1. 1 step + 1 step 2. 2 steps 解题思路: 首...

厉兵秣码 308

LeetCode --- 70. Climbing Stairs

70. Climbing Stairs Difficulty: Easy You are climbing a stair case. It takes n steps to reach to the top. Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the to...

MissXy_的博客 432

【Leetcode 70】Climbing Stairs -EASY

【Leetcode 70】Climbing Stairs -EASY题目思路题解反思复杂度分析思路反思 题目 You are climbing a stair case. It takes n steps to reach to the top. Each time you can either climb 1 or 2 steps. In how many distinct ways can y...

weixin_43621681的博客 389
上一篇: vim删除包含特定字符串的行
下一篇: 细数atoi中犯得错误(Leetcode第7题)
do-the-right
博客等级 码龄15年 16粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值