方法二:记忆化自底向上的方法
自底向上通过迭代计算斐波那契数的子问题并存储已计算的值,通过已计算的值进行计算。减少递归带来的重复计算。

算法:
- 如果 N 小于等于 1,则返回 N。
- 迭代 N,将计算出的答案存储在数组中。
- 使用数组前面的两个斐波那契数计算当前的斐波那契数。
- 知道我们计算到 N,则返回它的斐波那契数。
Java 实现
class Solution {
public int fib(int N) {
if (N <= 1) {
return N;
}
return memoize(N);
}
public int memoize(int N) {
int[] cache = new int[N + 1];
cache[1] = 1;
for (int i = 2; i <= N; i++) {
cache[i] = cache[i-1] + cache[i-2];
}
return cache[N];
}
}
Python 实现
class Solution:
def fib(self, N: int) -> int:
if N <= 1:
return N
return self.memoize(N)
def memoize(self, N: int) -> {}:
cache = {0: 0, 1: 1}
# Since range is exclusive and we want to include N, we need to put N+1.
for i in range(2, N+1):
cache[i] = cache[i-1] + cache[i-2]
return cache[N]