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

目录

剑指 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:

扫描二维码关注公众号,回复: 16770704 查看本文章
输入: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;
    }
}

运行结果:

猜你喜欢

转载自blog.csdn.net/qq_62799214/article/details/132917584
今日推荐