#509 斐波那契数(Java)

(1)思路

  • 动态规划

(2)解题步骤

  1. 定义状态:
    dp[i] 表示第 i 个斐波那契数
  2. 状态转移方程:
    根据斐波那契数列的定义,有:
    dp[i] = dp[i-1] + dp[i-2]
  3. 初始化:
    由初始条件知道:
    dp[0] = 0
    dp[1] = 1
  4. 填表:
    使用状态转移方程,从 2 到 n 依次计算每个斐波那契数
  5. 返回结果:
    返回 dp[n],即第 n 个斐波那契数

(3)复杂度

  1. 时间复杂度:O(n),因为使用一个循环从 2 到 n,每次计算一个斐波那契数
  2. 空间复杂度:O(n),因为使用了一个大小为 n+1 的数组来存储每个斐波那契数

(4)代码

class Solution {
    public int fib(int n) {
        // 特殊情况处理,当 n 为 0 或 1 时,直接返回 n
        if(n == 0 || n ==1) {
            return n;
        }

        // 定义 dp 数组,dp[i] 表示第 i 个斐波那契数
        // 创建一个大小为 n + 1 的数组,用于存储 dp[0] 到 dp[n] 的值
        int[] dp =  new int[n + 1];

        // 初始化状态,已知的初始值
        dp[0] = 0; // F(0) = 0
        dp[1] = 1; // F(1) = 1

        // 填表,根据状态转移方程 dp[i] = dp[i-1] + dp[i-2] 计算 dp[2] 到 dp[n]
        for(int i = 2; i < n + 1; i++) {
            dp[i] = dp[i - 1] + dp[i - 2];
        }

        // 返回第 n 个斐波那契数
        return dp[n];
    }
}
posted @ 2024-07-20 13:07  KenWan  阅读(51)  评论(0)    收藏  举报