Question:
There are a row of n houses, each house can be painted with one of the 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 a n x 3
cost matrix. For example, costs[0][0]
is the cost of painting house 0 with color red; costs[1][2]
is the cost of painting house 1 with color green, and so on... Find the minimum cost to paint all houses.
Solution:
public class Solution {
public int minCost(int[][] costs) {
//revise the costs
/*
if(costs==null||costs.length==0)
return 0;
int len=costs.length;
for(int i=1;i<=len-1;i++)
{
costs[i][0]+=Math.min(costs[i-1][1],costs[i-1][2]);
costs[i][1]+=Math.min(costs[i-1][0],costs[i-1][2]);
costs[i][2]+=Math.min(costs[i-1][0],costs[i-1][1]);
}
return Math.min(Math.min(costs[len-1][0],costs[len-1][1]),costs[len-1][2]);
*/
//not revise the costs
if(costs==null||costs.length==0)
return 0;
int LastR=costs[0][0];
int LastG=costs[0][1];
int LastB=costs[0][2];
for(int i=1;i<=costs.length-1;i++)
{
int CurR=costs[i][0]+Math.min(LastG,LastB);
int CurG=costs[i][1]+Math.min(LastR,LastB);
int CurB=costs[i][2]+Math.min(LastR,LastG);
LastR=CurR;
LastG=CurG;
LastB=CurB;
}
return Math.min(Math.min(LastR,LastG),LastB);
}
}