zoukankan      html  css  js  c++  java
  • 【剑指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

    思路

    代码

    【LeetCode】509. 斐波那契数
    时间复杂度:O(n)
    空间复杂度:O(n)

    class Solution {
    public:
        int fib(int n) {
            if (n <= 1) return n;
            vector<int> dp(n + 1);
            dp[0] = 0, dp[1] = 1;
            for (int i = 2; i <= n; ++i) {
                dp[i] = (dp[i - 1] + dp[i - 2]) % 1000000007;
            }
            return dp[n];
        }
    };
    

    优化空间

    因为当前数只和前两个数有关,所以可以用两个变量只保留前两个数。

    时间复杂度:O(n)
    空间复杂度:O(1)

    class Solution {
    public:
        int fib(int n) {
            if (n <= 1) return n;
            int a = 0, b = 1, res = 0;        
            for (int i = 2; i <= n; ++i) {
                res = (a + b) % 1000000007;
                a = b;
                b = res;        
            }
            return res;
        }
    };
    
  • 相关阅读:
    MyString
    Django疑难问题
    mysql 疑难问题-django
    python时间转换 ticks-FYI
    django建议入门-FYI
    Python风格规范-FYI
    scrum敏捷开发☞
    git基本命令
    centos下的安装mysql,jdk
    memcached for .net on windows
  • 原文地址:https://www.cnblogs.com/galaxy-hao/p/12318943.html
Copyright © 2011-2022 走看看