题解-斐波那契数列

4种做法

最简单:
递归算法

class Solution {
public:
    int Fibonacci(int n) {
        if(n == 0 || n == 1)
        {
            return n;
        }

        return Fibonacci(n - 1) + Fibonacci(n - 2);

    }
};

时间复杂度

优化:动态规划:
状态转移方程:

class Solution {
public:
    int Fibonacci(int n) {
        if(n == 0 || n == 1)
        {
            return n;
        }
        int* dp = new int[n+1];
        dp[0] = 0 ;
        dp[1] = 1 ;

        for(int i = 2 ; i <= n;i++)
        {
            dp[i] = dp[i-1] + dp[i-2];
        }
        return dp[n];

    }
};

时间复杂度
空间复杂度

进一步优化,我们发现每次计算只用到
那么保存2个临时变量即可。

class Solution {
public:
    int Fibonacci(int n) {
        if(n == 0 || n == 1)
        {
            return n;
        }
        int i_2 = 0;
        int i_1 = 1;
        int now;
        for(int i = 2 ; i <= n; i++)
        {
            now = i_2 + i_1;
            i_2 = i_1;
            i_1 = now;
        }
        return now;
    }
};

再进一步,可以发现
所以只需要1个临时变量即可:

class Solution {
public:
    int Fibonacci(int n) {
        if(n == 0 || n == 1)
        {
            return n;
        }
        int i_1 = 0;
        int now = 1;
        for(int i = 2 ; i <= n; i++)
        {
            now = now + i_1;
            i_1 = now - i_1;
        }
        return now;
    }
};
全部评论

相关推荐

05-01 22:41
中南大学 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务