Climbing Stairs

Problem Summary

Key Observations

Approach Taken

Main Concepts Used

Time & Space Complexity

Code

class Solution:
    def climbStairs(self, n: int) -> int:
        result = 0
        memo = {0: 1, -1: 0}

        def helper(left):
            if left in memo:
                return memo[left]

            memo[left - 1] = helper(left - 1)
            memo[left - 2] = helper(left - 2)
            return memo[left - 1] + memo[left - 2]

        return helper(n)

Optimized DP

class Solution:
    def climbStairs(self, n: int) -> int:
        dp = [0] * (n + 1)
        dp[n] = 1
        for i in range(n - 1, -1, -1):
            oneStep = dp[i + 1] if i + 1 <= n else 0
            twoStep = dp[i + 2] if i + 2 <= n else 0
            dp[i] = oneStep + twoStep

        return dp[0]