Climbing Stairs

easy1D Dynamic Programming20 stepsJava · Python · C++

Count the ways to climb n steps taking 1 or 2 at a time. The last move to step i came from step i−1 or i−2, so ways(i) = ways(i−1) + ways(i−2). Only the last two values are needed.

▶ Watch the animated trace

Traced input: n = 5 → 8. Original problem: neetcode.io/problems/climbing-stairs

Complexity

BestO(n)
AverageO(n)
WorstO(n)
SpaceO(1)

Two rolling variables instead of an array.

Key idea

Common mistakes

Solution

Java
int climbStairs(int n) {
    int prev2 = 1, prev1 = 1;
    for (int i = 2; i <= n; i++) {
        int cur = prev1 + prev2;
        prev2 = prev1;
        prev1 = cur;
    }
    return prev1;
}
Python
def climbStairs(n: int) -> int:
    prev2, prev1 = 1, 1
    for _ in range(2, n + 1):
        prev2, prev1 = prev1, prev1 + prev2
    return prev1
C++
int climbStairs(int n) {
    int prev2 = 1, prev1 = 1;
    for (int i = 2; i <= n; i++) {
        int cur = prev1 + prev2;
        prev2 = prev1;
        prev1 = cur;
    }
    return prev1;
}

Edge cases

Each one has its own trace in the interactive view.

CaseInputAnswer
n = 1
One single step.
n = 11
n = 2
1+1 or 2.
n = 22
Largest allowed input
Still fits in an int (just under 2³¹).
n = 451836311903
← N-QueensMin Cost Climbing Stairs →