Climbing Stairs Problem in DSA Typescript - Time & Space Complexity
We want to understand how the time needed to solve the climbing stairs problem changes as the number of stairs grows.
Specifically, how many steps does the program take to find the total ways to climb?
Analyze the time complexity of the following code snippet.
function climbStairs(n: number): number {
if (n <= 2) return n;
let first = 1, second = 2;
for (let i = 3; i <= n; i++) {
const third = first + second;
first = second;
second = third;
}
return second;
}
This code calculates how many distinct ways there are to climb n stairs, taking 1 or 2 steps at a time.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: The for-loop that runs from 3 up to n.
- How many times: It runs (n - 2) times, once for each stair from 3 to n.
Each new stair requires one addition and two variable updates inside the loop.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | 8 additions and updates |
| 100 | 98 additions and updates |
| 1000 | 998 additions and updates |
Pattern observation: The number of operations grows roughly in a straight line as n increases.
Time Complexity: O(n)
This means the time to find the number of ways grows directly in proportion to the number of stairs.
[X] Wrong: "Because the problem involves Fibonacci numbers, it must take exponential time."
[OK] Correct: This code uses a simple loop and stores only two previous results, so it runs in linear time, not exponential.
Understanding this problem helps you practice turning recursive ideas into efficient loops, a skill often needed in interviews.
"What if we changed the problem to allow steps of 1, 2, or 3 at a time? How would the time complexity change?"
Practice
Given n stairs, how many distinct ways can you climb to the top if you can take 1 or 2 steps at a time?Solution
Step 1: Understand the problem statement
The problem asks for the count of different ways to climb n stairs taking 1 or 2 steps at a time.Step 2: Identify what is being asked
We want the total number of distinct sequences of 1-step and 2-step moves that sum to n.Final Answer:
The total number of distinct ways to reach the top -> Option DQuick Check:
Count ways = total distinct sequences [OK]
- Confusing number of ways with minimum steps
- Thinking about maximum steps allowed
- Counting skipped stairs instead of ways
Solution
Step 1: Identify input and output types
The input is the number of stairs (number), output is the count of ways (number).Step 2: Match function signature
Only the signature with input number and output number matches the problem requirements.Final Answer:
function climbStairs(n: number): number -> Option AQuick Check:
Input and output types match problem [OK]
- Using string type for number input
- Function returning void instead of number
- No input parameter in function
function climbStairs(n: number): number {
if (n <= 2) return n;
let a = 1, b = 2;
for (let i = 3; i <= n; i++) {
let temp = a + b;
a = b;
b = temp;
}
return b;
}
console.log(climbStairs(4));Solution
Step 1: Trace initial values and loop
For n=4, start with a=1, b=2. Loop i=3 to 4: - i=3: temp=1+2=3, a=2, b=3 - i=4: temp=2+3=5, a=3, b=5Step 2: Return final value
Return b=5 as the number of ways to climb 4 stairs.Final Answer:
5 -> Option BQuick Check:
Ways for 4 stairs = 5 [OK]
- Returning a instead of b
- Off-by-one error in loop
- Incorrect initial values for a and b
function climbStairs(n: number): number {
if (n == 1) return 1;
let a = 1, b = 2;
for (let i = 2; i <= n; i++) {
let temp = a + b;
a = b;
b = temp;
}
return b;
}Solution
Step 1: Analyze loop start and base cases
Loop starts at i=2 but initial values assume i=3 start. This causes extra iteration and wrong count.Step 2: Correct loop start
Loop should start at i=3 to align with initial values a=1, b=2 and base case for n=2.Final Answer:
Loop starts at wrong index causing off-by-one error -> Option CQuick Check:
Loop index must match initial conditions [OK]
- Starting loop at 2 instead of 3
- Ignoring base case for n=2
- Swapping a and b updates
Solution
Step 1: Understand the new step options
Now steps can be 1, 2, or 3 at a time, so ways to reach i depend on previous 3 states.Step 2: Formulate recurrence relation
Number of ways to reach step i = sum of ways to reach i-1, i-2, and i-3.Step 3: Set base cases
dp[0]=1 (one way to stand still), dp[1]=1, dp[2]=2 (1+1 or 2 steps).Final Answer:
Use dp[i] = dp[i-1] + dp[i-2] + dp[i-3] with base dp[0]=1, dp[1]=1, dp[2]=2 -> Option AQuick Check:
Sum previous 3 states for new step sizes [OK]
- Multiplying previous states instead of adding
- Ignoring the 3-step option
- Wrong base cases for dp array
Ready to prove it?
Pass the test and this pattern moves unknown
