selected_coding_interview/docs/509. 斐波那契数.md
斐波那契数列的定义是 $f(n + 1) = f(n) + f(n - 1)$ ,生成第 $n$ 项的做法有以下几种:
下图帮助理解暴力搜索中的“重叠子问题”概念。
{:width=500}
若新建长度为 $n$ 的 $dp$ 列表,则空间复杂度为 $O(N)$ 。
sum, a, b ,利用辅助变量 $sum$ 使 $a, b$ 两数字交替前进即可 (具体实现见代码) 。class Solution:
def fib(self, n: int) -> int:
a, b = 0, 1
for _ in range(n):
a, b = b, a + b
return a
class Solution {
public int fib(int n) {
int a = 0, b = 1, sum;
for(int i = 0; i < n; i++){
sum = a + b;
a = b;
b = sum;
}
return a;
}
}
class Solution {
public:
int fib(int n) {
int a = 0, b = 1, sum;
for(int i = 0; i < n; i++){
sum = a + b;
a = b;
b = sum;
}
return a;
}
};