Faaez Razeen

Climbing Stairs

  • 2 min read
  • LC-Easy
  • Dynamic Programming

3 years ago

Solution (Memoization)

TimeSpaceExplanation
O(n)O(n)Time is O(n) because for each i, only one computation is made. The rest comes from the memoized values
def climbStairs(self, n: int) -> int: memo = {} def dfs(i): if i > n: return 0 if i == n: return 1 if i not in memo: memo[i] = dfs(i + 1) + dfs(i + 2) return memo[i] return dfs(0)

Solution (Dynamic Programming)

def climbStairs(self, n: int) -> int: dp = [0] * (n + 1) # n = 2, [0, 0, 0] dp[n] = 1 dp[n - 1] = 1 for i in range(n - 2, -1, -1): dp[i] = dp[i + 1] + dp[i + 2] return dp[0]
def climbStairs(self, n: int) -> int: if n == 1: return 1 dp = [0 for _ in range(n + 1)] dp[1] = 1 dp[2] = 2 for i in range(3, n + 1): dp[i] = dp[i - 1] + dp[i - 2] return dp[n]