2021-01-04 509.斐波那契數列
509.斐波那契數列
思路一:一個個計算過去
class Solution {
public int fib(int n) {
if(n<=1)
return n;
int a=0;
int b=1;
for(int i=0;i<n-1;i++){
int tmp = b;
b = a+b;
a = tmp;
}
return b;
}
}
思路二:利用遞推公式
X n = 1 5 [ ( 1 + 5 2 ) n − ( 1 − 5 2 ) n ] X_n=\frac{1}{\sqrt5}[(\frac{1+\sqrt{5}}{2})^n-(\frac{1-\sqrt{5}}{2})^n] Xn=51[(21+5)n−(21−5)n]
class Solution {
public int fib(int n) {
return (int) Math.round(1/Math.sqrt(5.0)*(Math.pow((1.0+Math.sqrt(5.0))/2.0,(double) n)-Math.pow((1.0-Math.sqrt(5.0))/2.0,(double) n)));
}
}
思路三:對角化矩陣
P
=
[
1
1
−
5
−
1
2
5
−
1
2
]
P
−
1
=
[
(
5
−
1
)
/
(
2
∗
5
)
−
1
/
5
(
5
+
1
)
/
(
2
∗
5
)
1
/
5
]
P=\begin{bmatrix} 1 & 1\\ \frac{-\sqrt5-1}{2} & \frac{\sqrt5-1}{2} \end{bmatrix} P^{-1}=\begin{bmatrix} (\sqrt5-1)/(2*\sqrt5) & -1/\sqrt5\\ (\sqrt5+1)/(2*\sqrt5) & 1/\sqrt5 \end{bmatrix}
P=[12−5−1125−1]P−1=[(5−1)/(2∗5)(5+1)/(2∗5)−1/51/5]
D
=
[
1
−
5
2
0
0
1
+
5
2
]
D = \begin{bmatrix} \frac{1-\sqrt5}{2} & 0\\ 0 & \frac{1+\sqrt5}{2} \end{bmatrix}
D=[21−50021+5]
因為
[
X
n
+
1
X
n
]
=
P
D
P
−
1
[
X
n
X
n
−
1
]
\begin{bmatrix} X_{n+1} \\ X_{n} \end{bmatrix} = PDP^{-1} \begin{bmatrix} X_{n} \\ X_{n-1} \end{bmatrix}
[Xn+1Xn]=PDP−1[XnXn−1]
因此
[
X
n
X
n
−
1
]
=
P
D
n
−
1
P
−
1
[
1
0
]
\begin{bmatrix} X_{n} \\ X_{n-1} \end{bmatrix} =PD^{n-1}P^{-1} \begin{bmatrix} 1 \\ 0 \end{bmatrix}
[XnXn−1]=PDn−1P−1[10]
哈哈,實際上和思路二差不多哈哈哈。
相關文章
- 509. 斐波那契數
- 【LeetCode刷題】509. 斐波那契數LeetCode
- 斐波那契數列
- 斐波那契數列(Java)Java
- 斐波那契數列 (C#)C#
- PHP 與斐波那契數列PHP
- 斐波那契數列詳解
- 著名的斐波那契數列
- 斐波那契數
- js實現斐波那契數列JS
- 斐波那契數列演算法演算法
- 第十題:斐波那契數列
- [C103] 斐波那契數列
- 力扣之斐波那契數列力扣
- 劍指offer——斐波那契數列
- 斐波那契數列js 實現JS
- 斐波那契數列Ⅳ【矩陣乘法】矩陣
- 使用Python實現斐波那契數列Python
- 演算法(1)斐波那契數列演算法
- 斐波那契數列的來源——數兔子
- 斐波那契數列數與等冪和
- Leedcode-斐波那契數
- LeetCode 509[斐波那契數]LeetCode
- 一千位斐波那契數
- 大數斐波那契數列的演算法演算法
- js迭代器實現斐波那契數列JS
- offer通過--9斐波那契數列-2
- 演算法一:斐波那契阿數列演算法
- JavaScript 實現:輸出斐波那契數列JavaScript
- 斐波那契數列:7數5層魔法塔(3)
- 斐波那契數列:7數5層魔法塔(2)
- 斐波那契數列:7數5層魔法塔(5)
- 斐波那契數列:7數5層魔法塔(8)
- 斐波那契數列:7數5層魔法塔(13)
- 斐波那契數列:7數5層魔法塔(12)
- 斐波那契數列:7數5層魔法塔(10)
- 斐波那契數列:7數5層魔法塔(11)
- 斐波那契數列:7數5層魔法塔(7)