刷题-Leetcode-509. 斐波那契数(动规)

509. 斐波那契数

题目链接

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/fibonacci-number/submissions/
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

题目描述

在这里插入图片描述

题目分析

动规问题:
1.确定dp以及dp下标的含义。 vector dp(n + 1);dp[i]:第i个斐波那契数列的值是dp[i]
2.状态转移公式。 dp[i] = dp[i - 1] + dp[i - 2];
3.初始化dp。 dp[0] = 0; dp[1] = 1;
4.确定遍历顺序。 遍历顺序 从前向后
5.举例推导dp数组。 0 1 1 2 3 5 8 13 21

  1. 动规
    时间复杂度: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];
        }
        return dp[n];    
    }
};
  1. 时间复杂度:O(n)
    空间复杂度:O(1)
class Solution {
    
    
public:
    int fib(int n) {
    
    
        if(n <= 1) return n;
        int dp[2];
        dp[0] = 0;
        dp[1] = 1;
        for(int i = 2; i <= n; i++){
    
    
            int sum = dp[0] + dp[1];
            dp[0] = dp[1];
            dp[1] = sum;
        }
        return dp[1];    
    }
};
  1. 递归
    时间复杂度:O(2^n)
    空间复杂度:O(n)
class Solution {
    
    
public:
    int fib(int n) {
    
    
        if(n <= 1) return n;
        return fib(n - 1) + fib(n - 2);
    }
};

Guess you like

Origin blog.csdn.net/qq_42771487/article/details/118080311