力扣509 斐波那契數
阿新 • 來源:網路 • 發佈:2023-02-22
題目:
斐波那契數 (通常用 F(n) 表示)形成的序列稱為 斐波那契數列 。該數列由 0 和 1 開始,後面的每一項數字都是前面兩項數字的和。也就是:
F(0) = 0,F(1) = 1
F(n) = F(n - 1) + F(n - 2),其中 n > 1
給定 n ,請計算 F(n) 。
示例:
輸入:n = 2
輸出:1
解釋:F(2) = F(1) + F(0) = 1 + 0 = 1
思路:
1.遞迴求解
class Solution {
public int fib(int n){
if(n==0){
return 0;
}
if(n==1){
return 1;
}
return fib(n-1)+fib(n-2);
}
}
2.動態規劃
動規五部曲:
(1)確定dp陣列以及下標的含義:dp[i]的定義為:第i個數的斐波那契數值是dp[i]
(2)確定遞推公式:狀態轉移方程 dp[i] = dp[i - 1] + dp[i - 2];
(3)dp陣列如何初始化:
dp[0] = 0;
dp[1] = 1;
(4)確定遍歷順序:從遞迴公式dp[i] = dp[i - 1] + dp[i - 2];中可以看出,dp[i]是依賴 dp[i - 1] 和 dp[i - 2],那麼遍歷的順序一定是從前到後遍歷的
(5)舉例推導dp陣列:
按照這個遞推公式dp[i] = dp[i - 1] + dp[i - 2推導,當N為10的時候,dp陣列應該是數列:0 1 1 2 3 5 8 13 21 34 55
如果程式碼寫出來,發現結果不對,就把dp陣列打印出來看看和推導的數列是否一致。
class Solution {
public int fib(int n) {
if (n <= 1){
return n;
}
//(1)確定dp陣列以及下標的含義:dp[i]的定義為:第i個數的斐波那契數值是dp[i]
int[] dp = new int[n + 1];
//(3)dp陣列如何初始化
dp[0] = 0;
dp[1] = 1;
for (int index = 2; index <= n; index++){//(4)確定遍歷順序
//(2)確定遞推公式
dp[index] = dp[index - 1] + dp[index - 2];
}
//(5)舉例推導dp陣列:
return dp[n];
}
}
