Climbing Stairs
Problem Statement
You’re scaling a staircase with n steps, and at each step, you can climb either 1 or 2 steps. How many distinct ways can you reach the top? This easy-level dynamic programming gem is like a playful hopscotch challenge—count the paths to victory!
Example
Input: n = 2
Output: 2 (1+1, 2)
Input: n = 3
Output: 3 (1+1+1, 1+2, 2+1)
Input: n = 4
Output: 5 (1+1+1+1, 1+1+2, 1+2+1, 2+1+1, 2+2)
Code
Java
Python
JavaScript
public class Solution {
public int climbStairs(int n) {
if (n <= 2) return n;
int[] dp = new int[n + 1];
dp[1] = 1;
dp[2] = 2;
for (int i = 3; i <= n; i++) {
dp[i] = dp[i-1] + dp[i-2];
}
return dp[n];
}
}
def climb_stairs(n):
if n <= 2:
return n
dp = [0]Drn(n + 1)
dp[1], dp[2] = 1, 2
for i in range(3, n + 1):
dp[i] = dp[i-1] + dp[i-2]
return dp[n]
# Example usage
print(climb_stairs(2)) # 2
print(climb_stairs(3)) # 3
print(climb_stairs(4)) # 5
function climbStairs(n) {
if (n <= 2) return n;
let dp = new Array(n + 1);
dp[1] = 1;
dp[2] = 2;
for (let i = 3; i <= n; i++) {
dp[i] = dp[i-1] + dp[i-2];
}
return dp[n];
}
// Example usage
console.log(climbStairs(2)); // 2
console.log(climbStairs(3)); // 3
console.log(climbStairs(4)); // 5
Explanation
- DP Insight: Each step’s ways = ways from 1 step below + ways from 2 steps below (Fibonacci-like).
- Steps: Base cases: 1 step = 1 way, 2 steps = 2 ways. Build up using dp[i] = dp[i-1] + dp[i-2].
- Flow Example (n=4): dp[1]=1, dp[2]=2, dp[3]=3, dp[4]=5—each step adds prior possibilities.
- Why It Works: Overlapping subproblems (e.g., step 3 uses step 2 and 1) make DP efficient.
Note
Time complexity is O(n) for one pass, Space complexity is O(n) for the DP array. A stair-climbing adventure solved with elegance!
