力扣509. 斐波那契数

题目来源(力扣):

https://leetcode.cn/problems/fibonacci-number/description/

题目描述:

已知斐波那契数列:0,1,1,2,3,5,……

a[i]=i,(i=0,1)
a[i]=a[i-1]+a[i-2] ,(i>1)
问第n个斐波那契数是多少(n从0开始)

0<=n<=30

基本思路:

动态规划人们级别题目,比背包问题更加简单,可以好好体会一下动态规划解决问题的代码实现流程。
参考《代码随想录》,一般需要结果五步来解决一个动态规划问题,能够保证规范和高效。

代码实现:

class Solution
{
public:
    int fib(int n)
    {
        // 0.最好优先处理最特殊(例如n=0)的情况,避免难以察觉的bug
        if (n == 0)
            return 0;
        if (n == 1)
            return 1;

        // 1.确定dp数组以及含义. dp[i] 表示第i个斐波那契数为dp[i]
        vector<int> dp(n + 1); // 由于下标从0~n,所以数组大小至少为n+1

        // 2.确定递推方程.
        // dp[i]=dp[i-1]+dp[i-2],题目中给出了

        // 3.初始化.
        dp[0] = 0, dp[1] = 1;

        // 4.确定遍历顺序.
        // 由于dp[i]是根据dp[i-1]、dp[i-2]得来的,因此需要从前往后遍历
        for (int i = 2; i <= n; i++)
            dp[i] = dp[i - 1] + dp[i - 2];

        // 5.打印部分序列. 用于确认dp数组和自己预设的一样(这里预设应该是[0,1,1,2,3,5,...])
        //  for(int i=0;i<dp.size();i++)
        //      cout<<dp[i]<<" ";

        return dp[n];
    }
};

时间复杂度

O(n)

posted @ 2024-11-22 14:58  HB_Computer  阅读(27)  评论(0)    收藏  举报