剑指 Offer 10- I. 斐波那契数列

127 阅读1分钟

class Solution {
private:
    unordered_map<int,bool> hash_map;
public:

    int fib(int n) {
        if (n == 0) return 0;
        if (n == 1) return 1;
        return (fib(n-1)%1000000007+fib(n-2)%1000000007)%1000000007;
    }
};

递归求解本身没有问题,但是存在大量重复计算,当数字较大时会导致超时。 改用动态规划方式

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