题目链接 思路 设dp[i][j]是第i个房子刷第j个颜色时总共需要花费的价格,那么自然有 dp[i][j] = min{dp[i-1][(j+1)%3],dp[i-1][(j+2)%3]} + cost[i]也就是说 dp[i][j]应该为前一个房子染另外两个颜色的最小值加上这个房子染颜色j的花费 class Solution { public int minCost(int[][] costs) { int[][] dp = new int[2][3]; System.arraycopy(costs[0], 0, dp[0], 0, 3); for (int i = 1; i < costs.length; i++) { for (int j = 0; j < 3; j++) { dp[i % 2][j] = Math.min(dp[(i - 1) % 2][(j + 1) % 3], dp[(i - 1) % 2][(j + 2) % 3]) + costs[i][j]; } } int index = (costs.length - 1) % 2; return Math.min(Math.min(dp[index][0], dp[index][1]), dp[index][2]); } }