509. 斐波那契数

 

labuladong 题解思路
难度简单

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

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

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

 

 暴力:
class Solution {
public:
    int fib(int n) {
        if (n <=1) return n;
        return fib(n-1)+fib(n-2);
    }
};

记忆:

class Solution {
public:
    int help(int n, vector<int>& memo) {
        if (n < 0) return 0;
        if (memo[n]!=-1) return memo[n];
        if (n<=1) return n;
        int res = help(n-1,memo) + help(n-2,memo);
        memo[n] = res;
        return res;
    }
    int fib(int n) {
        vector<int> memo(n+1,-1);
        return help(n,memo);
    }
};

 

dp:

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

 

 压缩:

class Solution {
public:
    int fib(int n) {
        if (n<=1) return n;
        int dpi=0,dpi_1=1,dpi_2=0;
        for(int i = 2; i <= n; i++) {
            dpi = dpi_1 + dpi_2;
            dpi_2 = dpi_1;
            dpi_1 = dpi;
        }
        return dpi;
    }
};

 

posted @ 2022-07-14 23:46  乐乐章  阅读(6)  评论(0编辑  收藏  举报