当前位置: 首页 > news >正文

算法解决爬楼梯问题

我们先来看题:一个 n 级长的楼梯,每次有两种爬法,一种是一次爬一级,另一种是一次爬两级,那么在长度会变化的情况下,我们总共有多少中爬楼梯方法呢?

如下图内容:

这个是一个非常容易的题目,通过观察我们会发现如下规律:

一个人到达第 i 层楼底包括两种方法:

  1. 选择从第 i-1 层再爬 1 步
  2. 选择从第 i-2 层再爬 2 步

然后一步步递推下来便是:

如果用 f[i] 表示达到第 i 层楼梯的所有方法,那么它进一步等于到达第 i-1 层楼梯的方法加上到达第 i-2 层楼梯的方法的和,即

f[i] = f[i-1] + f[i-2]

所以,直接递归就可以完成题目的要求啦,这个程序非常简单,但是如果直接递归的话对于力扣的题目而言会 TLE(超时),此时我们需要使用迭代的方法:

class Solution {public:int climbStairs(int n) {int prev = 0;int cur = 1;for(int i = 1; i <= n ; ++i){int tmp = cur;cur += prev;prev = tmp;}return cur;}
};

由于这个题目非常具有特色,我们在计算了少量的楼梯个数后会发现,这个方法数是符合斐波那契数列的值的:

所以我们可以进一步想到通过通项公式的方法得出题解:

class Solution {public:int climbStairs(int n) {const double s = sqrt(5);return floor((pow((1+s)/2, n+1) + pow((1-s)/2, n+1))/s + 0.5);}
};
http://www.dtcms.com/a/319448.html

相关文章:

  • SQL注入攻击基础
  • 【LVGL自学笔记暂存】
  • 如何正确选择建站工具?
  • FPGA高端项目:图像采集+Aurora 8B10B+UDP图传架构,基于GTP高速收发器的光口转网口,提供4套工程源码和技术支持
  • 旧物回收小程序系统开发:连接你我,共筑环保梦想
  • Linux下动态库链接的详细过程
  • 【网络运维】Linux:NFS服务器原理及配置
  • Kafka数据生产和发送
  • RuoYi OpenAPI集成从单体到微服务改造全过程记录
  • 高速公路安装定向广播的优势
  • centos VMware ESXi 扩容
  • 为什么任务顺序会影响效率?如何实现自定义顺序?
  • Python 基础详解:数据类型(Data Types)—— 程序的“数据基石”
  • Fiddler 安装配置教程
  • 认识汇编:解码计算机思维的底层语言(第一章)
  • 【YOLO学习笔记】YOLOv8详解解读
  • WEB开发-第二十七天(PHP篇)
  • 【Unity Plugins】使用ULipSync插件实现人物唇形模拟
  • 基于Spring Cloud Stream与Kafka的事件驱动微服务架构设计与实战指南
  • 【Python】基于Python自动化邮件发送系统:从配置到实现的完整指南
  • 【YOLOv8改进 - C2f融合】C2f融合SFS-Conv(空间 - 频率选择卷积)提升特征多样性,同时减少参数和计算量
  • 如何在 VS Code 中进行 `cherry-pick`
  • 使用Python验证常见的50个正则表达式
  • react接口防抖处理
  • [网格图DP]3363. 最多可收集的水果数目
  • 视频二维码如何助力博物馆打造智慧讲解体验
  • 数据库事务总结
  • 升级g++编译器
  • RK3568项目(十二)--linux驱动开发之基础通讯接口(上)
  • 时序数据库的功能与应用价值