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

news/2024/6/16 10:04:29 标签: 算法, leetcode, 动态规划

目录

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

题解:

代码:

运行结果:


leetcode.cn/problems/fei-bo-na-qi-shu-lie-lcof/solutions/976888/fei-bo-na-qi-shu-lie-by-leetcode-solutio-hbss/" title="剑指 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;
    }
}

运行结果:


http://www.niftyadmin.cn/n/5028781.html

相关文章

ChatGPT在职业规划中的智能助手

随着科技的不断发展&#xff0c;人工智能&#xff08;AI&#xff09;正逐渐成为我们日常生活的一部分。ChatGPT作为一种智能语言模型&#xff0c;可以在职业规划中充当智能助手的角色。本文将探讨ChatGPT在职业规划中的应用&#xff0c;以及它如何成为未来工作的智能伙伴。 首先…

3D生成式AI模型、应用与工具大全

当谈到技术炒作时&#xff0c;人工智能正在超越虚拟世界&#xff0c;吸引世界各地企业和消费者的注意力。 但人工智能可以进一步增强虚拟世界&#xff0c;至少在某种意义上&#xff1a;资产创造。 AI 有潜力扩大用于虚拟环境的 3D 资产的创建。 推荐&#xff1a;用 NSDT编辑器…

python学习--字符串的常用操作

字符串查询操作 功能方法名称作用查询方法index&#xff08;&#xff09;查找子串substr第一次出现的位置&#xff0c;如果查找的子串不存在时&#xff0c;则抛出valueError查询方法rindex&#xff08;&#xff09;查找子串sunstr最后一次出现的位置&#xff0c;如果查找的子串…

计网第五章(运输层)(四)(TCP的流量控制)

一、基本概念 流量控制就是指让发送方的发送速率不要太快&#xff0c;使得接收方来得及接收。可以使用滑动窗口机制在TCP连接上实现对发送方的流量控制。 注意&#xff1a;之前在讨论可靠传输时&#xff0c;讨论过选择重传协议和回退N帧协议都是基于滑动窗口的机制上进行实现…

dockerfile文件详解(常用命令)

在编写Dockerfile时&#xff0c;考虑以下最佳实践&#xff1a; 最小化镜像大小&#xff1a;尽量使用轻量级的基础镜像&#xff0c;并在构建过程中尽量减少不必要的层。 合理使用缓存&#xff1a;Docker会尝试重用缓存的层&#xff0c;如果一个步骤发生变化&#xff0c;后续步骤…

Python--文件和异常

目录 1、读取文件 1.1 读取文件的全部内容 1.2 相对路径和绝对路径 1.3 访问文件中的各行 1.4 使用文件中的内容 1.5 包含100万位的大型文件 1.6 圆周率中的生日 2、写入文件 2.1 写入一行 2.2 写入多行 3、异常 3.1 处理ZeroDivisionError 异常 3.2 使用try-exce…

虚幻引擎 UE5 增强输入系统

用人话讲&#xff01;虚幻引擎 UE5 增强输入系统&#xff08;蓝图篇&#xff09;_酥妃大魔王i的博客-CSDN博客 UE5 -- EnhancedInput(增强输入系统) - 知乎 (zhihu.com) 简单认识 虚幻引擎中的增强输入 | 虚幻引擎5.1文档 (unrealengine.com) 文档有较详细介绍 标记一下方便…

C语言读入bmp图像

1.bmp图像数据格式 BMP&#xff08;Bitmap&#xff09;是一种常见的图像文件格式&#xff0c;它以二进制形式存储图像数据。以下是BMP图像的基本数据格式&#xff1a; 1. BMP文件头&#xff08;14字节&#xff09;&#xff1a; 文件类型&#xff08;2字节&#xff09;&#x…