Mental Model
Remember past Fibonacci numbers so you don't calculate them again.
Analogy: Like writing down your scores in a game so you don't have to remember or redo them every time.
fib[0] = 0 fib[1] = 1 fib[2] = ? fib[3] = ? fib[4] = ? ...
fib[0] = 0 fib[1] = 1 fib[2] = ? fib[3] = ? fib[4] = ? ...
fib = [0, 1, ?, ?, ?, ?]
fib = [0, 1, 1, ?, ?, ?]
fib = [0, 1, 1, 2, ?, ?]
fib = [0, 1, 1, 2, 3, ?]
fib = [0, 1, 1, 2, 3, 5]
fib = [0, 1, 1, 2, 3, 5] Answer: 5
class FibonacciDP: def fib(self, n: int) -> int: if n <= 1: return n fib = [0] * (n + 1) fib[0], fib[1] = 0, 1 for i in range(2, n + 1): fib[i] = fib[i - 1] + fib[i - 2] return fib[n] if __name__ == '__main__': n = 5 solver = FibonacciDP() print(solver.fib(n))
if n <= 1:
return nfib = [0] * (n + 1)
fib[0], fib[1] = 0, 1for i in range(2, n + 1):
fib[i] = fib[i - 1] + fib[i - 2]return fib[n]if n <= 1: return n
if n <= 1: return n
for i in range(2, n + 1): fib[i] = fib[i - 1] + fib[i - 2]
def fib_dp(n):
fib = [0] * (n+1)
fib[0], fib[1] = 0, 1
for i in range(2, n+1):
fib[i] = fib[i-1] + fib[i-2]
return fib[n]
print(fib_dp(6))def fib_dp(n):
fib = [0] * n
fib[0], fib[1] = 0, 1
for i in range(2, n+1):
fib[i] = fib[i-1] + fib[i-2]
return fib[n]def fib_sum(n):
fib = [0] * (n+1)
fib[0], fib[1] = 0, 1
for i in range(2, n+1):
fib[i] = fib[i-1] + fib[i-2]
# What to add here to get sum of fib[0] to fib[n]?
return ???Pass the test and this pattern moves unknown