public class Solution {
public int minCost(int[][] costs) {
if (costs == null || costs.length < 1 || costs[0].length < 1) return 0;
int n = costs.length;
//int[][] dp = new int[n][3];
for (int i = 1; i < n; 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[n - 1][0], costs[n - 1][1]), costs[n - 1][2]);
}
}
public class Solution {
public int minCost(int[][] costs) {
if(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; i++){
int curR = Math.min(lastG,lastB)+costs[i][0];
int curG = Math.min(lastR,lastB)+costs[i][1];
int curB = Math.min(lastR,lastG)+costs[i][2];
lastR = curR;
lastG = curG;
lastB = curB;
}
return Math.min(Math.min(lastR,lastG),lastB);
}
}