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 house0
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.
Example 1:
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.
Example 2:
Input: costs = [[7,6,2]] Output: 2
Constraints:
costs.length == n
costs[i].length == 3
1 <= n <= 100
1 <= costs[i][j] <= 20
class Solution:
def minCost(self, costs: List[List[int]]) -> int:
a = b = c = 0
for ca, cb, cc in costs:
a, b, c = min(b, c) + ca, min(a, c) + cb, min(a, b) + cc
return min(a, b, c)
class Solution {
public int minCost(int[][] costs) {
int r = 0, g = 0, b = 0;
for (int[] cost : costs) {
int _r = r, _g = g, _b = b;
r = Math.min(_g, _b) + cost[0];
g = Math.min(_r, _b) + cost[1];
b = Math.min(_r, _g) + cost[2];
}
return Math.min(r, Math.min(g, b));
}
}
class Solution {
public:
int minCost(vector<vector<int>>& costs) {
int r = 0, g = 0, b = 0;
for (auto& cost : costs) {
int _r = r, _g = g, _b = b;
r = min(_g, _b) + cost[0];
g = min(_r, _b) + cost[1];
b = min(_r, _g) + cost[2];
}
return min(r, min(g, b));
}
};
func minCost(costs [][]int) int {
r, g, b := 0, 0, 0
for _, cost := range costs {
_r, _g, _b := r, g, b
r = min(_g, _b) + cost[0]
g = min(_r, _b) + cost[1]
b = min(_r, _g) + cost[2]
}
return min(r, min(g, b))
}
func min(x, y int) int {
if x < y {
return x
}
return y
}
/**
* @param {number[][]} costs
* @return {number}
*/
var minCost = function (costs) {
let [a, b, c] = [0, 0, 0];
for (let [ca, cb, cc] of costs) {
[a, b, c] = [
Math.min(b, c) + ca,
Math.min(a, c) + cb,
Math.min(a, b) + cc,
];
}
return Math.min(a, b, c);
};