DDSA Solutions

Min Cost Climbing Stairs

Time: O(n)
Space: O(1)
Advertisement

Intuition

Minimum cost to reach top of stairs where you can climb 1 or 2 steps. DP.

Algorithm

  1. 1dp[i] = cost[i] + min(dp[i-1], dp[i-2]). Answer = min(dp[n-1], dp[n-2]).

Common Pitfalls

  • Same as LC 746. Can start from step 0 or step 1. DP is O(n) O(1) with two variables.
Min Cost Climbing Stairs.java
Java
// Approach: DP. dp[i] = min cost to reach step i = min(dp[i-1] + cost[i-1], dp[i-2] + cost[i-2]).
// Time: O(n) Space: O(1)
class Solution {
    static int minCostClimbingStairs(int[] cost) {
        int[] dp = new int[cost.length + 1];

        Arrays.fill(dp, -1);

        return solve(cost, 0, dp);
    }

    static int solve(int[] cost, int i, int[] dp) {
        if (dp[i] != -1)
            return dp[i];

        if (i == cost.length - 1)
            return 0;

        if (i == cost.length - 2)
            return Math.min(cost[i + 1], cost[i]);

        int n1 = cost[i] + solve(cost, i + 1, dp);

        int n2 = cost[i + 1] + solve(cost, i + 2, dp);

        dp[i] = Math.min(n1, n2);

        return dp[i];
    }
};
Advertisement
Was this solution helpful?