class Solution {
public int minCostII(int[][] costs) {
int N = costs.length;
if(N==0) return 0;
int k = costs[0].length;
if(k==1&&N==1) return costs[0][0];
int[][] dp = new int[N+1][k];
for(int i=1;i<=N;i++){
int min_1 = dp[i-1][0]>dp[i-1][1]?dp[i-1][1]:dp[i-1][0];
int index_1 = dp[i-1][0]>dp[i-1][1]?1:0;
int min_2 = dp[i-1][0]>dp[i-1][1]?dp[i-1][0]:dp[i-1][1];
int index_2 = dp[i-1][0]>dp[i-1][1]?0:1;
for(int j=2;j<k;j++){
if(dp[i-1][j]<min_1){
min_2 = min_1;
index_2 = index_1;
min_1 = dp[i-1][j];
index_1 = j;
}else if(dp[i-1][j]<min_2){
min_2 = dp[i-1][j];
index_2 = j;
}
}
for(int j=0;j<k;j++){
if(index_1==j){
dp[i][j] = min_2 + costs[i-1][j];
}else{
dp[i][j] = min_1 + costs[i-1][j];
}
}
}
int min = Integer.MAX_VALUE;
for(int j=0;j<k;j++){
if(dp[N][j]<min) min = dp[N][j];
}
return min;
}
}
leetcode 265. Paint House II
最新推荐文章于 2022-05-01 22:26:32 发布