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

LC-70-爬楼梯

原题链接:爬楼梯

个人解法

思路:

动态规划
状态表示:f[i]表示走到第n阶台阶有几种方法
状态转移:f[i] = f[i -1] + f[i - 2]

这实际上就是斐波那契数列,通过转移可以看到,我们只用了三个变量,故可以不用状态数组,而只用三个变量进行转移。

时间复杂度:O(n)O(n)O(n)

代码:

class Solution {
public:int climbStairs(int n) {int a = 1, b = 1, c = 1;for(int i = 2;i <= n;i ++) {c = a + b;a = b, b = c;}return c;}
};

更好的解法

  • 斐波那契数列矩阵表示

在这里插入图片描述
由递推可以得到:
在这里插入图片描述

故我们可以利用矩阵乘法快速幂求出MnM^nMn,从而求除FnF_nFn

  • 利用解析解

斐波那契数列解析解:

由矩阵表示可以看到MMM矩阵为可逆矩阵且MMM可相似对角化,从而表示为M=SΛS−1,其中Λ为由特征值,S为特征向量组成的矩阵M = S\Lambda S^{-1},其中\Lambda为由特征值,S为特征向量组成的矩阵M=SΛS1,其中Λ为由特征值,S为特征向量组成的矩阵

那么Mn=SΛnS−1,从而求出Fn的解析解那么M^n = S\Lambda^{n}S^{-1},从而求出F_n的解析解那么Mn=SΛnS1,从而求出Fn的解析解

http://www.lryc.cn/news/2699.html

相关文章:

  • Scratch少儿编程案例-可爱的简约贪吃蛇
  • 编译 Android 时如何指定输出目录?
  • CF1574C Slay the Dragon 题解
  • 创建Django项目
  • CUDA中的统一内存
  • 利用机器学习(mediapipe)进行人脸468点的3D坐标检测--视频实时检测
  • 事务基础知识与执行计划
  • 数据库实践LAB大纲 06 INDEX
  • 网络安全实验室6.解密关
  • 了解并发编程
  • (C语言)程序环境和预处理
  • RiProV2主题美化增加支付页底部提示语ritheme主题美化
  • 2022年文章分类整理
  • 蓝牙设备中的Device UUID 与 Service UUID
  • 【学习记录】PCA主成分分析 SVD奇异值分解
  • 用 Python 调用 GPT-3 API
  • 类和对象实操之【日期类】
  • 微搭中如何实现弹性布局
  • 九龙证券|外资强势出手!这只科创板百元股,被疯狂加仓
  • 51单片机最强模块化封装(4)
  • 五、Git本地仓库基本操作——分支管理
  • vscode搭建python Django网站开发环境
  • 【mybatis】实现分页查询
  • CF1560D Make a Power of Two 题解
  • C#开发的OpenRA的读取文件的函数
  • SpringBoot结合XXL-JOB实现定时任务
  • 【Node.js】 创建web服务器
  • 基于go语言实现RestFul交互
  • 情感溢出:读《浣溪沙》
  • 深入解读.NET MAUI音乐播放器项目(一):概述与架构