mirror of https://github.com/doocs/leetcode.git
|
…
|
||
|---|---|---|
| .. | ||
| README.md | ||
| README_EN.md | ||
| Solution.cpp | ||
| Solution.go | ||
| Solution.java | ||
| Solution.js | ||
| Solution.py | ||
README_EN.md
| comments | difficulty | edit_url | tags | ||
|---|---|---|---|---|---|
| true | Medium | https://github.com/doocs/leetcode/edit/main/solution/0200-0299/0256.Paint%20House/README_EN.md |
|
256. Paint House 🔒
Description
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 house0with 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 == ncosts[i].length == 31 <= n <= 1001 <= costs[i][j] <= 20
Solutions
Solution 1
Python3
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)
Java
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));
}
}
C++
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));
}
};
Go
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))
}
JavaScript
/**
* @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);
};