LeetCode算法动态规划—斐波那契数列

2023-09-16 13:34:41

目录

剑指 Offer 10- I. 斐波那契数列 - 力扣(LeetCode)

题解:

代码:

运行结果:


写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项(即 F(N))。斐波那契数列的定义如下:

F(0) = 0,   F(1) = 1
F(N) = F(N - 1) + F(N - 2), 其中 N > 1.

斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。

答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。

示例 1:

输入:n = 2
输出:1

示例 2:

输入:n = 5
输出:5

提示:

  • 0 <= n <= 100

题解:

  1. 首先定义一个常量 MOD,其值为 1000000007,用于对斐波那契数取模。
  2. 如果 n 小于 2,直接返回 n,因为在斐波那契数列中,前两个数字是 0 和 1。
  3. 初始化三个整数变量 p, q, r 分别为 0, 0, 1。p 用于保存上一个斐波那契数,q 用于保存当前斐波那契数,r 用于保存下一个斐波那契数。
  4. 使用循环从 2 开始到 n,每次更新 p, q, r 的值。将 q 的值赋给 p,将 r 的值赋给 q,然后计算新的 r 值为 (p + q) % MOD。
  5. 循环结束后,返回最终结果 r,即第 n 个斐波那契数。

通过滚动数组的思想,这段代码只需要常量级别的额外空间,而不会随着 n 的增大而增加额外的空间消耗,大大提高了代码的效率。

代码:

class Solution {
    public int fib(int n) {
        final int MOD = 1000000007;
        if (n < 2) {
            return n;
        }
        int p = 0, q = 0, r = 1;
        for (int i = 2; i <= n; ++i) {
            p = q; 
            q = r; 
            r = (p + q) % MOD;
        }
        return r;
    }
}

运行结果:

更多推荐

typeahead.js使用时发现列表加载不全

维护老旧项目时发现在项目中输入框的搜索建议频繁性的显示不全,和数据接口返回的结果不一致,由于项目老旧以及交接文档不全难以维护,记录一下解决思路和过程,防止下次再遇到类似问题。1.问题排查思路(1)确认使用插件查看项目代码发现搜索建议的实现使用typeahead.js插件,版本号为v0.11.1插件官网:https://

排序算法-归并排序

属性归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(DivideandConquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。归并排序核心步骤:归并排序总结1.归并

Start 方法源码深究——模板方法设计模式

目录一.🦁前言1.1New状态1.2Runnable1.3Runing1.4Block状态1.5Terminated状态二.🦁线程start方法源码剖析2.1虚拟机调用run方法执行线程2.2最少有两个线程在执行2.3不可以重复执行2.4start方法体三.🦁模板方法设计模式3.1基本概念3.2自定义一个场景实现

高云FPGA系列教程(6):ARM定时器使用

文章目录@[toc]1.ARM定时器简介2.FPGA配置3.常用函数4.MCU程序设计5.工程下载本文是高云FPGA系列教程的第6篇文章。本篇文章介绍片上ARMCortex-M3硬核处理器定时器外设的使用,演示定时器溢出中断的配置方法,基于TangNano4K开发板。参考文档:Gowin_EMPU(GW1NS-4C)软

《计算机视觉中的多视图几何》笔记(7)

7ComputationoftheCameraMatrixPPP这章讲的是摄像机参数估计。摄像机标定,本质上就是求摄像机矩阵PPP,当我们知道足够多的X↔xX\leftrightarrowxX↔x,我们该如何计算PPP?如果知道3D和2D点的对应,那么内参和外参可以由基本的线性方程求解问题算出。遇到超定解时的解决办法也

Java面试题基础第十一天

一、java面试题第十一天1.跨域问题怎么解决呢?有以下有几种方法CORS,跨域资源共享我们可以通过springboot为每一个请求设置它的请求头,来设置它的可以跨域的路径,这样可以为每一个请求都可以跨域了@CrossOrigin注解我们可以通过springboot来设置Controller类加个@CrossOrigi

Deformable DETR(2020 ICLR)

DeformableDETR(2020ICLR)detr训练epochs缩小十倍,小目标性能更好Deformableattention结合变形卷积的稀疏空间采样和Transformer的关系建模能力使用多层级特征层特征,不需要使用FPN的设计(直接使用backbone多层级输出)两种提升方法:bbox迭代细化机制2.两

二叉树的概念及存储结构

目录1.树的概念1.1树的相关概念1.2树的表示与应用2.二叉树的概念及结构2.1二叉树的概念2.1.1特殊的二叉树2.2.2二叉树的性质2.2二叉树的结构2.2.1顺序存储2.2.2链式存储这是一篇纯理论的博客,会对数据结构中的二叉树进行详细的讲解,让你对树的能有个清晰的认知.1.树的概念树是一种非线性的数据结构,它

Vue2组件通信 - dispatch 和 broadcast

目录8,dispatch和broadcast整体思路实现dispatch使用举例broadcast使用举例承接文章Vue2中10种组件通信方式和实践技巧,因为一篇文章太长无法发表,所以做拆分。8,dispatch和broadcast在Vue@1版本中,有$dispatch和$broadcast这种基于组件树的工作流来通

C++关键词探索:理解变量、函数参数、函数返回值以及类成员函数的修饰符

在C++编程中,我们经常会遇到一些关键词,它们可以用来修饰变量、函数参数、函数返回值以及类的成员函数。这些关键词包括const、static、volatile、mutable、signed、unsigned、long、short、virtual、explicit、inline和friend。让我们一起来深入理解一下这些

基于SSM的高校教学业绩信息管理系统设计与实现

末尾获取源码开发语言:JavaJava开发工具:JDK1.8后端框架:SSM前端:采用JSP技术开发数据库:MySQL5.7和Navicat管理工具结合服务器:Tomcat8.5开发软件:IDEA/Eclipse是否Maven项目:是目录一、项目简介二、系统功能三、系统项目截图​编辑四、核心代码登录相关文件上传封装五、

热文推荐