# Solving Leetcode Interviews in Seconds with AI: Climbing Stairs


	# Introduction
	In this blog post, we will explore how to solve the LeetCode problem "70" using AI. LeetCode is a popular platform for preparing for coding interviews, and with the help of AI tools like [Chatmagic](https://www.chatmagic.app), we can generate solutions quickly and efficiently - helping you pass the interviews and get the job offer without having to study for months.

	# Problem Statement
	> 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?   Example 1:  Input: n = 2 Output: 2 Explanation: There are two ways to climb to the top. 1. 1 step + 1 step 2. 2 steps  Example 2:  Input: n = 3 Output: 3 Explanation: There are three ways to climb to the top. 1. 1 step + 1 step + 1 step 2. 1 step + 2 steps 3. 2 steps + 1 step    Constraints:  1 <= n <= 45  

	# Explanation
	Here's an efficient solution to the climbing stairs problem:

*   **Dynamic Programming:** The number of ways to reach step `n` is the sum of the number of ways to reach step `n-1` and step `n-2`. This is because we can either take one step from `n-1` or two steps from `n-2` to reach `n`.
*   **Iterative Approach:** To avoid recursion's overhead and potential stack overflow for larger `n`, we'll use an iterative approach to build up the solution from the base cases.
*   **Space Optimization:** Instead of storing the number of ways to reach every step, we only need to store the last two values. This dramatically reduces the space complexity.

*   **Runtime Complexity:** O(n), **Storage Complexity:** O(1)

	
	# Code
	```python
	def climbStairs(n: int) -> int:
    """
    Calculates the number of distinct ways to climb to the top of a staircase
    with n steps, where each time you can climb 1 or 2 steps.

    Args:
        n: The number of steps in the staircase.

    Returns:
        The number of distinct ways to climb to the top.
    """

    if n <= 2:
        return n

    one_step_before = 2  # Ways to reach step 2
    two_steps_before = 1  # Ways to reach step 1
    current = 0

    for i in range(3, n + 1):
        current = one_step_before + two_steps_before
        two_steps_before = one_step_before
        one_step_before = current

    return current
	```
			
