Paint House

Asked atUber
1Give yourself 5 minutes
2Answer out loud, not in your head
3Then compare with the answer below

The problem

There is a row of n houses, where each house can be painted one of three colors: red, blue, or green. The cost of painting each house with a certain color is different. You have to paint all the houses such that no two adjacent houses have the same color.

The cost of painting each house with a certain color is represented by an n x 3 cost matrix costs.

  • For example, costs[0][0] is the cost of painting house 0 with the color red; costs[1][2] is the cost of painting house 1 with color green, and so on... Return the minimum cost to paint all houses.

Input: costs = [[17,2,17],[16,16,5],[14,3,19]] Output: 10 Explanation: Paint house 0 into blue, paint house 1 into green, paint house 2 into blue. Minimum cost: 2 + 5 + 3 = 10.

Input: costs = [[7,6,2]] Output: 2 Explaination : Painting house 0 into green is minimum cost possibe .

Input: costs = [[13,19,11],[13,16,7],[14,12,19],[17,20,17],[16,16,5],[14,3,19]]

  • costs.length == n
  • costs[i].length == 3
  • 1 <= n <= 100
  • 1 <= costs[i][j] <= 20

cpp

class Solution {
public:
    int minCost(vector<vector<int>>& costs) {
        // Your code goes here
    }
};

java

class Solution {
    public int minCost(int[][] costs) {
        // Your code goes here
    }
}

python

class Solution(object):
    def minCost(self, costs):
        """
        :type costs: List[List[int]]
        :rtype: int
        """
        # Your code goes here

javascript

/**
 * @param {number[][]} costs
 * @return {number}
 */
var minCost = function(costs) {
    // Your code goes here
};

csharp

public class Solution
{
    public int MinCost(int[][] costs)
    {
        // Your code goes here
    }
}

go

func minCost(costs [][]int) int {
}
Stuck? Show a way to structure it+
  1. 01Set DP for the first house to its paint costs.
  2. 02For each later house, choose the cheaper different previous color.
  3. 03Update all three color states from old values.
  4. 04Use temporary values before overwriting.
  5. 05Return the minimum final state.

Reference answer

Then expect these follow-ups

  • How would you reconstruct color choices?

    Tests: parents

  • How does k colors change the complexity?

    Tests: minima tracking

Free to read · better with Enzo

Practice this out loud with Enzo

Enzo runs it as a mock interview, pushes back with follow-ups, and grades you on the rubric.

Next question