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

力扣70:爬楼梯

力扣70:爬楼梯

  • 题目
  • 思路
  • 代码

题目

假设你正在爬楼梯。需要 n 阶你才能到达楼顶。

每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?

思路

首先我们先列出来前几个台阶的答案从第一个开始:1,2,3,5。前几个台阶我们比较好想所以可以直接算出来,我们发现这里面是不是有什么规律啊,第三个台阶的答案是一二台阶的和,第四个台阶的答案是二三台阶的和。这是巧合还是规律呢?我们可以再写后面两个的答案或者仔细观察一下题目。
这就是规律不是巧合,为什么呢?题目说了我们每次只能爬一个或两个台阶那么我们想要爬到第四个台阶是不是只能从第二个一下走两个台阶到或者从第三个一下走一个台阶到。所以呢想要到第四个台阶我们必须先到第二个或者第三个台阶,他们俩有各有多少种走法相加不就是第四个台阶的走法吗?所以从第三个台阶开始每层台阶的答案就是前两层台阶的答案相加,我们假设f(n)是第n层台阶的走法,那么f(n) = f(n-2) + f(n-1)。
那么有了这个方程我们不就可以最底层开始一步一步的算到第n层吗,不就得到答案了吗?这道题用到的思想是动态规划,我们可以发现我们每层得到的数都是这层的最终答案也就是把题目从得到第n层方法转换为了得到第n-2,第n-1层台阶的答案以此类推最终到第0层。所以既然能从上往下推也就可以从下往上得到答案,这就是动态规划的思想也就是把一个问题拆成子问题然后通过得到子问题的答案来推得原来问题的答案。而上面那个方程就是转换方程。

代码

class Solution {
public:int climbStairs(int n) {// 先得出爬一楼和二楼的值int p = 1;int q = 2;if (n == 1) {return p;} else if (n == 2) {return q;} else {// 从三楼开始// 因为我们一次只能爬一楼或者二楼// 所以从第三层开始每层的方法就等于// 前两楼的方法的总和int r = 0;for (int i = 3; i <= n; i++) {r = p + q;p = q;q = r;}return r;}}
};
http://www.dtcms.com/a/336844.html

相关文章:

  • Java基础(九):Object核心类深度剖析
  • 【Linux指南】gcc/g++编译器:从源码到可执行文件的全流程解析
  • DELL服务器 R系列 IPMI的配置
  • Linux 编译器 gcc 与 g++
  • Linux磁盘阵列
  • 开源Verilog仿真即波形模拟工具iVerilog初步教程
  • 香港数据合集:建筑物、手机基站、POI、职住数据、用地类型
  • Java 中表示数据集的常用集合类
  • 【快速解决】Redis配置问题以及解决方法
  • 世界模型之自动驾驶
  • 实战架构思考及实战问题:Docker+‌Jenkins 自动化部署
  • 基于Android的随身小管家APP的设计与实现/基于SSM框架的财务管理系统/android Studio/java/原生开发
  • Rust 教程之简介000
  • 【网络安全实验报告】实验六: 病毒防护实验
  • Rust 异步中的 Waker
  • reGeorg、dnscat2--安装、使用
  • moe并行
  • 【Linux系统】进程间通信:System V IPC——消息队列和信号量
  • 灯哥FOC笔记(3) --FOC开环程序原理
  • 轨迹优化 | 基于边界值问题(BVP)的无约束路径平滑(附ROS C++/Python仿真)
  • 第二章:C语言数据类型和变量
  • PyTorch数据处理工具箱详解|深入理解torchvision与torch.utils.data
  • Gemini CLI 系统配置小结
  • ±2cm精度破壁者:有鹿机器人如何重写清洁行业规则?
  • java自动化更新
  • Git+Jenkins 基本使用
  • Win11安装WSL、Docker Desktop
  • MySQL集群、分布式
  • 如何生成结婚登记档案目录套打文件
  • 上下文切换及线程操作相关内容