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);
    }
}

Recent posts from blogs that I like

going fast and slow

on novel logic

via bookbear express

They really do think AI might kill everyone

A recent resignation tweet from an Anthropic researcher has everyone talking about the AI apocalypse again. Among other things, he said:

The people building AI earnestly believe that it could kill us all by the end of the decade.

Many people found it hard to believe that AI researchers think this ...

via Sean Goedecke

Brushstrokes: Lovis Corinth’s narratives

His style evolved from a mildly painterly realism in 1890, steadily loosened in the early 1900s, then broke up into brushstrokes and marks by the early 1920s. But continued to tell stories effectively.

via The Eclectic Light Company