###### tags: `Week_2`, `Dynamic Programming`
# Dynamic Programming
## 509. [Fibonacci Number](https://leetcode.com/problems/fibonacci-number/)
```python=
class Solution:
def fib(self, n: int) -> int:
if n <= 1:
return n
dp = [0 for _ in range(n+1)]
dp[0] = 0
dp[1] = 1
for i in range(2, n+1):
dp[i] = dp[i-1] + dp[i-2]
return dp[-1]
```
## 70. [Climbing Stairs](https://leetcode.com/problems/climbing-stairs/)
```python=
class Solution:
def climbStairs(self, n: int) -> int:
if n <= 2:
return n
current = 0
prev1 = 2
prev2 = 1
for i in range(3, n+1):
current = prev1 + prev2
prev2 = prev1
prev1 = current
return current
```