《剑指offer》面试题10- I. 斐波那契数列
问题描述
写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 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
class Solution {
public:
int fib(int n) {
if(n < 2) return n;
return fib(n-1)+fib(n-2);
}
};
结果会超出时间限制
代码2
不取余在n=45就错了,至于为啥取这个,我有很多小问号。
class Solution {
public:
int fib(int n) {
if(n < 2)return n;
vector<int> num(n+1,-1);
num[0]=0;num[1]=1;
return comp(n,num);
}
int comp(int n,vector<int> &num)
{
if(num[n]==-1)
num[n] = (comp(n-1,num)+comp(n-2,num))%1000000007;
return num[n];
}
};
结果:
执行用时 :0 ms, 在所有 C++ 提交中击败了100.00%的用户
内存消耗 :6.2 MB, 在所有 C++ 提交中击败了100.00%的用户
代码3(动态规划)
class Solution {
public:
int fib(int n) {
if(n < 2)return n;
vector<int> ans(n+1,0);
ans[0]=0;ans[1]=1;
for(int i = 2; i <= n; ++i)
{
ans[i] = (ans[i-1]+ans[i-2])%1000000007;
}
return ans[n];
}
};
结果:
执行用时 :4 ms, 在所有 C++ 提交中击败了45.29%的用户
内存消耗 :6.3 MB, 在所有 C++ 提交中击败了100.00%的用户
代码4(改进动态规划)
class Solution {
public:
int fib(int n) {
if(n < 2)return n;
int n1 = 0,n2 = 1,ans;
for(int i = 2; i <= n; ++i)
{
ans = (n1+n2)%1000000007;
n1 = n2;
n2 = ans;
}
return ans;
}
};
结果:
执行用时 :0 ms, 在所有 C++ 提交中击败了100.00%的用户
内存消耗 :6 MB, 在所有 C++ 提交中击败了100.00%的用户
《剑指offer》面试题10- I. 斐波那契数列的更多相关文章
- 剑指offer——面试题10:斐波那契数列
个人答案: #include"iostream" #include"stdio.h" #include"string.h" using na ...
- 剑指offer 面试题10:斐波那契数列
题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0).n<=39 编程思想 知道斐波拉契数列的规律即可. 编程实现 class Solu ...
- C#版 - 剑指offer 面试题9:斐波那契数列及其变形(跳台阶、矩形覆盖) 题解
面试题9:斐波那契数列及其变形(跳台阶.矩形覆盖) 提交网址: http://www.nowcoder.com/practice/c6c7742f5ba7442aada113136ddea0c3?tp ...
- 剑指Offer面试题:8.斐波那契数列
一.题目:斐波那契数列 题目:写一个函数,输入n,求斐波那契(Fibonacci)数列的第n项.斐波那契数列的定义如下: 二.效率很低的解法 很多C/C++/C#/Java语言教科书在讲述递归函数的时 ...
- 剑指Offer面试题:7.斐波那契数列
一 题目:斐波那契数列 题目:写一个函数,输入n,求斐波那契(Fibonacci)数列的第n项.斐波那契数列的定义如下: 二 效率很低的解法 很多C/C++/C#/Java语言教科书在讲述递归函数的时 ...
- 剑指Offer(书):斐波那契数列
题目:大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0).n<=39 分析:第一种方法:递归,45时,时间为5s,50时,我就等不及了.原因是重 ...
- 剑指offer 7. 递归和循环 斐波那契数列
题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0). n<=39 简简单单 废话不多说,直接上代码: public class Sol ...
- 剑指offer二刷——数组专题——斐波那契数列
题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0,第1项是1). n<=39 我的想法 斐波那契数列定义:F(0)=0,F(1)=1, ...
- 【校招面试 之 剑指offer】第10-1题 斐波那契数列
递归以及非递归实现: #include<iostream> using namespace std; long long fun(long long n){ if(n == 0){ ret ...
- 剑指offer第二版面试题10:斐波那契数列(JAVA版)
题目:写一个函数,输入n,求斐波那契数列的第n项.斐波那契数列的定义如下: 1.效率很低效的解法,挑剔的面试官不会喜欢 使用递归实现: public class Fibonacci { public ...
随机推荐
- Table.FirstN保留前面N….First…(Power Query 之 M 语言)
数据源: "姓名""基数""个人比例""个人缴纳""公司比例""公司缴纳"&qu ...
- CF275A Lights Out 题解
Content 有一个 \(3\times 3\) 的矩阵.一开始每个元素都为 \(1\). 你可以对任意的位置进行操作,每次操作将在这个位置上的元素及其上下左右的元素全部由 \(1\) 改为 \(0 ...
- Kafka Eagle分布式模式
1.概述 最近有同学留言,Kafka Eagle的分布式模式功能怎么使用,如何部署安装?今天笔者就为大家来详细介绍一下Kafka Eagle的分布式模式功能的安装和使用. 2.内容 首先,这里我们需要 ...
- C. Arpa's loud Owf and Mehrdad's evil plan
C. Arpa's loud Owf and Mehrdad's evil plan time limit per test 1 second memory limit per test 256 me ...
- Shell实现文件内容批量替换的方法
在Linux系统中,文件内容的批量替换同Windows平台相比要麻烦一点.不过这里可以通过Shell命令或脚本的方式实现批量替换的功能. 笔者使用过两个命令:perl和sed ,接下来会对其做出说明. ...
- NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis
目录 概 主要内容 positional encoding 额外的细节 代码 Mildenhall B., Srinivasan P. P., Tancik M., Barron J. T., Ram ...
- Capstone CS5268DEMOBOARD原理图|TYPEC转HDMI+VGA+PD3.0+USB3.0扩展坞方案
Capstone CS5268DEMOBOARD原理图|TYPEC转HDMI+VGA+PD3.0+USB3.0四合一设计参考 CS5268 是typec转HDMI+VGA+pd3.0+U3四合一拓展坞 ...
- JavaScript交互式网页设计 • 【第8章 jQuery动画与特效】
全部章节 >>>> 本章目录 8.1 显示隐藏动画效果 8.1.1 show() 方法与hide() 方法 8.1.2 toggle()方法 8.1.3 实践练习 8.2 ...
- 编写Java程序,使用JDialog构造登录窗体
返回本章节 返回作业目录 需求说明: 实现思路: 定义用户信息实体类User. 创建LoginDemoStart主类,初始化UI. 从UI获取用户信息并保存到User实体. 实现代码:
- 使用sudo执行命令提示command not found
笔记: 使用源码部署nginx的时候,使用sudo nginx提示command not found,但是直接使用nginx会导致权限问题: 这种情况应该是环境变量导致的,使用 env |grep P ...