Leetcode-每日一题【剑指 Offer 10- I. 斐波那契数列】

news/2024/11/8 0:32:02/

题目

写一个函数,输入 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.题目要求我们求斐波那契(Fibonacci)数列的第 n 项和,还给出了递归公式,那我们想到的第一种方法可能就是递归,像这样。

class Solution {public int fib(int n) {if(n <= 1){return n;}return fib(n - 1) + fib(n - 2);}
}

但是这种方法会超出时间限制,因为它做了很多重复的工作

相同元素的f(n),每当我们在用到的时候就会将其重新算一遍,所以这种方法会超出时间限制。

2.那么我们还有没有优化的方法呢?当时是有的,我们可以新建一个数组在对应下标的位置存储一下对应f(n)的值,这样我们只需要计算一次,下次在用到时可以直接从数组中拿取。

3.首先我们新建一个数组,将其中的值都初始化为 -1,然后新建一个f(n)函数去进行运算,如果 n <= 1 的我们可以直接返回n,否则我们需要去数组中查找下标为n时的arr[n]是否为 -1,若为 -1 则说明我们还没有计算,我们就需要进行计算 f(n - 1) + f(n - 2) ,题目要求我们需要取模不要忘记了,然后将计算出的结果存放在数组相应的位置以便下次使用,最后返回计算结果即可。

代码实现

class Solution {int[] arr;public int fib(int n) {arr = new int[n+1];for(int i = 0; i <= n; i++){arr[i] = -1;}return f(n);}public int f(int n){if(n <= 1){return n;}if(arr[n] != -1){return arr[n];}int sum = (f(n - 1) + f(n - 2)) % 1000000007;arr[n] = sum;return sum;}
}

测试结果

 

 


http://www.ppmy.cn/news/1010076.html

相关文章

Kali中AWD靶机环境搭建

Kali中AWD靶机环境搭建 1、kali安装docker2、克隆项目&#xff08;400多M&#xff0c;下载会有点久&#xff09;3、进入项目4、下载镜像5、改镜像名6、比赛环境搭建6.1 启动靶机6.2 连接裁判机&#xff0c;启动check脚本6.3 关闭环境命令 7、 靶机访问方式7.1 web界面访问7.2 s…

idea:Web server failed to start. Port 8081 was already in use.

文章目录 Web server failed to start. Port 8081 was already in use.问题描述解决方案1解决方案2关闭占用端口 Web server failed to start. Port 8081 was already in use. 问题描述 8081端口被占用 解决方案1 查看配置信息 重启idea 解决方案2 关闭占用端口 1.使用c…

java并行流的介绍

什么是并行流&#xff1f; 在介绍并行流之前&#xff0c;我们首先需要了解Stream API是什么。Stream API允许我们以声明性的方式对数据进行操作&#xff0c;例如过滤、映射、排序等&#xff0c;而无需编写繁琐的迭代和循环代码。这不仅提高了代码的可读性&#xff0c;还可以帮…

codeup(云效)流水线部署主机离线的问题

我是通过 云助手Agent 来进行部署的&#xff0c;也就是codeup账号和ecs不是一个账号。 助手的安装等问题参考&#xff1a; 在ECS及自有主机上部署云效失败的常见问题_云效-阿里云帮助中心 如何启动、停止或卸载云助手客户端_云服务器 ECS-阿里云帮助中心 如何安装云助手客…

【C# 基础精讲】C# 数据类型概述

在C#中&#xff0c;数据类型可以分为以下三大类&#xff1a;值类型、引用类型和指针类型。每种类型都具有不同的特点和适用场景&#xff0c;了解这些类型对于编写高效和稳健的C#程序至关重要。下面将依次介绍这三大类数据类型&#xff0c;并列出C#中常见的每种类型。 值类型 值…

sptring AOP两种动态代理

本文开始 1.spring AOP 实现动态代理的方式&#xff1a;JDK Proxy &#xff0c; CGLIB; JDK Proxy实现代理**&#xff1a;通过 反射 实现接收代理的类 并且代理类必须实现接口&#xff1b;- 接口 CGLIB实现代理**&#xff1a;通过 继承 方式实现动态代理&#xff1b;&#xf…

【编译原理】五、简单四则运算的代码实现

1. 前言 前面说了那么多BNF的相关理论知识&#xff0c;实际上就是为了一个目的&#xff1a; 描述语法规则 描述语法规则是一切的开始。最终&#xff0c;还是要用代码来实现。 如果对于BNF仍然是一头雾水&#xff0c;也没关系&#xff0c;因为我们的最终目的是编写解析器&…

Kubernetes关于cpu资源分配的设计

kubernetes资源 在K8s中定义Pod中运行容器有两个维度的限制: 资源需求(Requests):即运行Pod的节点必须满足运行Pod的最基本需求才能运行Pod。如 Pod运行至少需要2G内存,1核CPU。(软限制)资源限额(Limits):即运行Pod期间,可能内存使用量会增加,那最多能使用多少内存,这…