mirror of
https://github.com/autistic-symposium/master-algorithms-py.git
synced 2025-05-22 16:31:15 -04:00
👾
This commit is contained in:
parent
1d44d182e2
commit
a85ed914d3
320 changed files with 0 additions and 0 deletions
60
dynamic_programming/climbing_stairs.py
Normal file
60
dynamic_programming/climbing_stairs.py
Normal file
|
@ -0,0 +1,60 @@
|
|||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
# author: bt3gl
|
||||
|
||||
'''
|
||||
You are climbing a staircase. It takes n steps to reach the top.
|
||||
Each time you can either climb 1 or 2 steps.
|
||||
In how many distinct ways can you climb to the top?
|
||||
'''
|
||||
|
||||
|
||||
def climb_stairs_o2n(n: int) -> int:
|
||||
if n == 0 or n == 1:
|
||||
return 1
|
||||
return climb_stairs_o2n(n-1) + climb_stairs_o2n(n-2)
|
||||
|
||||
|
||||
|
||||
def helper(n: int, memo: dict[int, int]) -> int:
|
||||
if n == 0 or n == 1:
|
||||
return 1
|
||||
if n not in memo:
|
||||
memo[n] = helper(n-1, memo) + helper(n-2, memo)
|
||||
return memo[n]
|
||||
|
||||
def climb_stairs_memoization(n: int) -> int:
|
||||
memo = {}
|
||||
return helper(n, memo)
|
||||
|
||||
|
||||
|
||||
def climb_stairs_optimized(n: int) -> int:
|
||||
if n == 0 or n == 1:
|
||||
return 1
|
||||
prev, curr = 1, 1
|
||||
for i in range(2, n+1):
|
||||
temp = curr
|
||||
curr = prev + curr
|
||||
prev = temp
|
||||
return curr
|
||||
|
||||
|
||||
|
||||
def climb_stairs_tabulation(n: int) -> int:
|
||||
if n == 0 or n == 1:
|
||||
return 1
|
||||
|
||||
dp = [0] * (n+1)
|
||||
dp[0] = dp[1] = 1
|
||||
|
||||
for i in range(2, n+1):
|
||||
dp[i] = dp[i-1] + dp[i-2]
|
||||
return dp[n]
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
print(climb_stairs_o2n(4))
|
||||
print(climb_stairs_memoization(4))
|
||||
print(climb_stairs_optimized(4))
|
||||
print(climb_stairs_tabulation(4))
|
Loading…
Add table
Add a link
Reference in a new issue