Climbing Staircase
Problem
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
Solution
I remember doing this problem during undergrad/when studying for my AWS internship interviews. I remember the solution being pretty simple after discovering it. I know that it involves dynamic programming (this problem is in the DP category after all).
class Solution {
public int climbStairs(int n) {
return climbStairs(n, new HashMap<>());
}
public int climbStairs(int n, Map<Integer, Integer> m) {
if (n < 3) {
return n;
}
if (!m.containsKey(n)) {
m.put(n, climbStairs(n - 1, m) + climbStairs(n - 2, m));
}
return m.get(n);
}
}