如何解决LeetCode 256题的算法问题?

2026-05-29 11:143阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计422个文字,预计阅读时间需要2分钟。

如何解决LeetCode 256题的算法问题?

例如,costs[0][0] + 表示第 0 + 号房间粉刷成红色的成本费;costs[1][2]? 表示第 1 + 号房间粉刷成绿色的成本费,以此类推。请计算所有房间粉刷完成后所有房间成本最低的花费。注意:所有花费均平均为正数。

例如,costs[0][0] 表示第 0 号房子粉刷成红色的成本花费;costs[1][2]?表示第 1 号房子粉刷成绿色的花费,以此类推。请你计算出粉刷完所有房子最少的花费成本。

如何解决LeetCode 256题的算法问题?

注意:

所有花费均为正整数。

示例:

输入: [[17,2,17],[16,16,5],[14,3,19]]

输出: 10

解释: 将 0 号房子粉刷成蓝色,1 号房子粉刷成绿色,2 号房子粉刷成蓝色。

最少花费: 2 + 5 + 3 = 10。

思路:dp[i][0,1,2]分别代表第i个格子必须用红、蓝、绿刷的最优解。则dp[i][0]的前一个格子可以是蓝或绿,也就是dp[i-1][1和dp[i-1][2]两种情况,取最优解加上cost[i][0]即可。另两种类似。

dp[i]只和dp[i-1]有关,所以用几个变量记录即可。

class Solution {

public int minCost(int[][] costs) {

if(costs == null || costs.length == 0) return 0;

int r_cost = costs[0][0];

int b_cost = costs[0][1];

int g_cost = costs[0][2];

for(int i = 1; i < costs.length; i++){

int r_tmp = r_cost;

int b_tmp = b_cost;

int g_tmp = g_cost;

r_cost = costs[i][0] + Math.min(b_tmp, g_tmp);

本文共计422个文字,预计阅读时间需要2分钟。

如何解决LeetCode 256题的算法问题?

例如,costs[0][0] + 表示第 0 + 号房间粉刷成红色的成本费;costs[1][2]? 表示第 1 + 号房间粉刷成绿色的成本费,以此类推。请计算所有房间粉刷完成后所有房间成本最低的花费。注意:所有花费均平均为正数。

例如,costs[0][0] 表示第 0 号房子粉刷成红色的成本花费;costs[1][2]?表示第 1 号房子粉刷成绿色的花费,以此类推。请你计算出粉刷完所有房子最少的花费成本。

如何解决LeetCode 256题的算法问题?

注意:

所有花费均为正整数。

示例:

输入: [[17,2,17],[16,16,5],[14,3,19]]

输出: 10

解释: 将 0 号房子粉刷成蓝色,1 号房子粉刷成绿色,2 号房子粉刷成蓝色。

最少花费: 2 + 5 + 3 = 10。

思路:dp[i][0,1,2]分别代表第i个格子必须用红、蓝、绿刷的最优解。则dp[i][0]的前一个格子可以是蓝或绿,也就是dp[i-1][1和dp[i-1][2]两种情况,取最优解加上cost[i][0]即可。另两种类似。

dp[i]只和dp[i-1]有关,所以用几个变量记录即可。

class Solution {

public int minCost(int[][] costs) {

if(costs == null || costs.length == 0) return 0;

int r_cost = costs[0][0];

int b_cost = costs[0][1];

int g_cost = costs[0][2];

for(int i = 1; i < costs.length; i++){

int r_tmp = r_cost;

int b_tmp = b_cost;

int g_tmp = g_cost;

r_cost = costs[i][0] + Math.min(b_tmp, g_tmp);