zoukankan      html  css  js  c++  java
  • 【LeetCode】509. 斐波那契数

    题目

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

    F(0) = 0,   F(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.
    

    提示:
    0 ≤ N ≤ 30

    思路:动态规划

    【剑指Offer】面试题10- I. 斐波那契数列

    如果使用递归f[n] = f[n-1] + f[n-2]会有大量重复计算,时间复杂度为O(n^2),使用动态规划使时间复杂度为O(n)。

    代码

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

    class Solution {
    public:
        int fib(int N) {        
            if (N == 0 || N == 1) {
                return N;
            }
            int f[N+1];
            f[0] = 0;
            f[1] = 1;
            for (int i = 2; i <= N; ++i) {
                f[i] = f[i-1] + f[i-2];
            }
            return f[N];
        }
    };
    

    优化空间复杂度

    因为每个当前值只与前面两个数相关,所以可以利用两个变量优化空间复杂度。
    时间复杂度:O(n)
    空间复杂度:O(1)

    class Solution {
    public:
        int fib(int N) {        
            if (N == 0 || N == 1) {
                return N;
            }
            int a = 0, b = 1;        
            int res = 0;
            for (int i = 2; i <= N; ++i) {
                res = a + b;
                a = b;
                b = res;
            }
            return res;
        }
    };
    
  • 相关阅读:
    python高级语法
    python的内置类型
    Python现状
    前端项目技术栈
    1.22
    类型转换!
    文件上传下载!
    Struts2的Ognl详解
    第二章复习
    解耦和耦合
  • 原文地址:https://www.cnblogs.com/galaxy-hao/p/12318970.html
Copyright © 2011-2022 走看看