Climbing Stairs

 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



Approach 1 Basic Recursion -Problem TLE


class Solution {
    public int climbStairs(int n) {
       
      if(n==0) return 1;
      if(n<0) return 0;

      return climbStairs(n-1)+climbStairs(n-2);

    }
}
  • It recalculates the same subproblems many times.

  • Time complexity: O(2ⁿ) → This will timeout for large n (like n = 45 or more).

Approach 2- Add Memoization (Top-Down + Cache)


class Solution {
    public int climbStairs(int n) {
        int[] dp = new int[n + 1];
        Arrays.fill(dp, -1);
        return helper(n, dp);
    }

    private int helper(int n, int[] dp) {
        if (n == 0) return 1;
        if (n < 0) return 0;

        if (dp[n] != -1) return dp[n];

        dp[n] = helper(n - 1, dp) + helper(n - 2, dp);
        return dp[n];
    }
}

Line What it does
dp = new int[n + 1]; Create DP array to store subproblem results
fill(dp, -1) Mark all as "not yet solved"
helper(n, dp) Recursive function to solve the problem
if (dp[n] != -1) Return already computed value (memoization)
dp[n] = ... Store new result in DP for future reuse

Comments

Popular posts from this blog

Two Sum II - Input Array Is Sorted

Comparable Vs. Comparator in Java

Increasing Triplet Subsequence