首页 > 其他分享 >斐波那契数

斐波那契数

时间:2022-10-08 22:02:04浏览次数:90  
标签:契数 return 斐波 result fib 解法

LeetCode 75 学习计划适用于想为技术面试做准备但不确定应该聚焦于哪些题目的用户。学习计划中的题目都是经过精心挑选的,Level 1和 Level 2 学习计划是为初级用户和中级用户准备的,题目覆盖了大多数中层公司面试时所必需的数据结构和算法,Level 3 学习计划则是为准备面试顶级公司的用户准备的。​​来源​

第 10 天

​斐波那契数​

难度:简单

题目

斐波那契数 (通常用 F(n) 表示)形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是:

F(0) = 0,F(1) = 1

F(n) = F(n - 1) + F(n - 2),其中 n > 1

给定 n ,请计算 F(n) 。

示例 1:

输入:n = 2
输出:1
解释:F(2) = F(1) + F(0) = 1 + 0 = 1

示例 2:

输入:n = 3
输出:2
解释:F(3) = F(2) + F(1) = 1 + 1 = 2

示例 3:

输入:n = 4
输出:3
解释:F(4) = F(3) + F(2) = 2 + 1 = 3

题解

方法1:是最简单的解法但也是最耗时的解法。

// 解法1
var fib = function(N) {
if (N < 2) return N;
return fib(N - 1) + fib(N - 2);
}

方法2:从i=2开始迭代N,将第i个元素设置前两个元素的和,这样最后一个元素的值就是斐波那契数。

// 解法2
var fib = function(N) {
if ( N <= 1) return N;
const result = new Array(N);
result[0] = 0;
result[1] = 1;
for (let i = 2; i < N + 1; i++) {
result[i] = result[i - 1] + result[i - 2];
}
return result[N];
};

方法3:由于斐波那契数存在递推关系,因此可以使用动态规划求解。动态规划的状态转移方程即为上述递推关系,边界条件为 F(0) 和 F(1)。

根据状态转移方程和边界条件,可以得到时间复杂度和空间复杂度都是 O(n)的实现。由于 F(n) 只和 F(n-1) 与 F(n-2) 有关,因此可以使用「滚动数组思想」把空间复杂度优化成 O(1)。

// 解法3
var fib = function(n) {
if (n < 2) {
return n;
}
let p = 0, q = 0, r = 1;
for (let i = 2; i <= n; i++) {
p = q;
q = r;
r = p + q;
}
return r;
};

总结

滚动数组的解法太棒了,除了最常规的递归思想,滚动数组以更低的空间复杂度解题更优~

标签:契数,return,斐波,result,fib,解法
From: https://blog.51cto.com/u_13961087/5738761

相关文章

  • 斐波那契数列
    1.斐波那契数列斐波那契数列是如下的数列:1,1,2,3,5,8,13...其中,该数列的前两项是1,从第三项(包括第三项)开始第n项为第(n-1)项与第(n-2)项的和。2.斐波那契数列递推......
  • 斐波那契数列
    fibnacci数列定义斐波那契数列(Fibonaccisequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(LeonardoFibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这......
  • 斐波那契数列
    什么是斐波那契数列斐波那契数列(Fibonaccisequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2......
  • LeetCode 斐波那契数算法题解 All In One
    LeetCode斐波那契数算法题解AllInOneFibonacciNumber斐波那契数最佳实践性能优化"usestrict";/****@authorxgqfrms*@licenseMIT*@cop......
  • LeetCode剑指 Offer II 093 最长斐波那契数列
    LeetCode剑指OfferII093最长斐波那契数列classSolution:deflenLongestFibSubseq(self,arr:List[int])->int:n,loc,ans=len(arr),{},0......
  • 509.fibonacci-number 斐波那契数
    题目描述509.fabonacci-number解题思路\(a_n=a_{n-1}+a_{n-2}\),利用这一递推关系构建for循环即可,实际上只需要容量为2的数组。代码classSolution{public:......
  • 斐波那契数列(取模)
    题目:菲波那契数列是指这样的数列:数列的第一个和第二个数都为1,接下来每个数都等于前面2个数之和。给出一个正整数a,要求菲波那契数列中第a个数对1000取模的结果是多少。......
  • 斐波那契数列(递归、记忆化搜索、递归)
    题目:菲波那契数列是指这样的数列:数列的第一个和第二个数都为1,接下来每个数都等于前面2个数之和。给出一个正整数k,要求菲波那契数列中第k个数是多少。输入输入一行,......
  • 斐波那契查找算法
    斐波那契也称黄金分割法,通过黄金分割点找到mid值,即mid=low+F(k-1)-1 (F代表斐波那契数列)对F(k-1)-1的理解由斐波那契数列F[k]=F[k-1]+F[k-2]的性质,可以得到 (F[k]-1......
  • LeetCode 509 斐波那契数
    动态规划constintN=40;classSolution{public:intdp[N];intfib(intn){dp[1]=1;for(inti=2;i<=n;i++)......