LeetCode: 509.斐波那契数|刷题打卡

603 阅读2分钟

一、题目描述

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

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

给你 n ,请计算 F(n)

示例 1:

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

示例 2:

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

示例 3:

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

二、思路分析

了解过斐波那契数列的,然后加上题目给出的公式基本上就知道怎么写了。
打个比方 n = 5 就代表获取斐波那契数列的第五级的数据

0: 0
1: 1
2: 0 + 1 = 1
3: 1 + 1 = 2
4: 1 + 2 = 3
5: 2 + 3 = 5
6: 3 + 5 = 8
...

所以只要处理了边界情况即 0 的时候返回 0 、1 的时候返回 1,其他情况皆返回 (n - 1) + (n - 2) 即可,也就是可以直接使用递归来解决这个问题。

三、AC 代码

方法 1:

var fib = function(n) {
    if(n < 2) return n

    return fib(n - 1) + fib(n - 2)
}

方法 2: 优化添加了 记忆 ,也就是缓存了之前计算过的数列的值,再次计算的时候直接返回值即可。

const map = new Map()

var fib = function(n) {
    if(n < 2) return n

    if(!map.has(n)) {
        map.set(n, fib(n - 1) + fib(n - 2))
    }

    return map.get(n)
}

四、总结

斐波那契数数的值就是它后两位的值的和。
学会使用 记忆 来优化代码。

本文正在参与「掘金 2021 春招闯关活动」, 点击查看 活动详情