当前位置:网站首页>剑指 Offer II 091. 粉刷房子
剑指 Offer II 091. 粉刷房子
2022-06-26 19:47:00 【北_尘】
看了下leetcode的今天的 每日一题,题目链接:剑指 Offer II 091. 粉刷房子
题目如下:
假如有一排房子,共 n 个,每个房子可以被粉刷成红色、蓝色或者绿色这三种颜色中的一种,你需要粉刷所有的房子并且使其相邻的两个房子颜色不能相同。
当然,因为市场上不同颜色油漆的价格不同,所以房子粉刷成不同颜色的花费成本也是不同的。每个房子粉刷成不同颜色的花费是以一个 n x 3 的正整数矩阵 costs 来表示的。
例如,costs[0][0] 表示第 0 号房子粉刷成红色的成本花费;costs[1][2] 表示第 1 号房子粉刷成绿色的花费,以此类推。
请计算出粉刷完所有房子最少的花费成本。
我这里使用动态规划的方法,方程如下:
1.初始化dp数组
dp[0][0] = costs[0][0];
dp[0][1] = costs[0][1];
dp[0][2] = costs[0][2];
2.状态转移方程:i的区间[1,n)
dp[i][0] = Math.min(dp[i-1][1],dp[i-1][2])+costs[i][0];
dp[i][1] = Math.min(dp[i-1][0],dp[i-1][2])+costs[i][1];
dp[i][2] =Math.min(dp[i-1][0],dp[i-1][1])+costs[i][2];
整体代码如下:
public int minCost(int[][] costs) {
int n = costs.length;
int len = costs[0].length;
int[][] dp = new int[n][len];
dp[0][0] = costs[0][0];
dp[0][1] = costs[0][1];
dp[0][2] = costs[0][2];
for(int i = 1;i < n;i++){
dp[i][0] = Math.min(dp[i-1][1],dp[i-1][2])+costs[i][0];
dp[i][1] = Math.min(dp[i-1][0],dp[i-1][2])+costs[i][1];
dp[i][2] = Math.min(dp[i-1][0],dp[i-1][1])+costs[i][2];
}
return Math.min(dp[n-1][0],Math.min(dp[n-1][1],dp[n-1][2]));
}
当然也可改改三目运算符试试。
代码稍作改动,试着节省点空间,代码如下:
public int minCost(int[][] costs) {
int n = costs.length;
int len = costs[0].length;
int[][] dp = new int[2][len];
dp[0][0] = costs[0][0];
dp[0][1] = costs[0][1];
dp[0][2] = costs[0][2];
for(int i = 1;i < n;i++){
dp[1][0] = Math.min(dp[0][1],dp[0][2])+costs[i][0];
dp[1][1] = Math.min(dp[0][0],dp[0][2])+costs[i][1];
dp[1][2] = Math.min(dp[0][0],dp[0][1])+costs[i][2];
dp[0][0] = dp[1][0];
dp[0][1] = dp[1][1];
dp[0][2] = dp[1][2];
dp[1][0] = 0;
dp[1][0] = 0;
dp[1][0] = 0;
}
return Math.min(dp[0][0],Math.min(dp[0][1],dp[0][2]));
}
边栏推荐
- 刷新三观的HP-UX系统中的强指针赋值出core问题
- [kubernetes] kubernetes principle analysis and practical application (under update)
- 物联网协议的王者:MQTT
- Xlua get button registration click event of ugui
- Redis Basics
- Chain game development finished product source code chain game system development details
- uni-app使用canvas绘制二维码
- MySQL stored procedure
- Successfully solved the problem of garbled microservice @value obtaining configuration file
- 案例描述:比赛分数管理系统,需要统计历届冠军所得比赛得分,并记录到文件中,其中系统有如下需求:- 打开系统有欢迎界面,并显示可选择的选项- 选项1:记录比赛得分- 选项2:查看往届
猜你喜欢

黑客用机器学习发动攻击的九种方法

On the origin of the dispute between the tradition and the future of database -- AWS series column

【Kubernetes】Kubernetes 原理剖析与实战应用(更新中)

Filebeat安装及使用

Pinda general permission system (day 1~day 2)

mongoDB的三种基础备份方法

微服务架构

Kubernetes 资源拓扑感知调度优化

Some cold knowledge about QT database development

stm32和电机开发(直流有刷电机和步进电机)
随机推荐
[kubernetes] kubernetes principle analysis and practical application (under update)
Tiktok practice ~ search page ~ scan QR code
SSO微服务工程中用户行为日志的记录
论数据库的传统与未来之争之溯源溯本----AWS系列专栏
刷新三观的HP-UX系统中的强指针赋值出core问题
抖音实战~搜索页面~视频详情
Solidity - 合约继承子合约包含构造函数时报错 及 一个合约调用另一合约view函数收取gas费用
Boot指标监测
Deep learning: numpy
微服务架构
Project practice 6: distributed transaction Seata
Super VRT
链游开发成品源码 链游系统开发详情说明
问题解决:虚拟机无法复制粘贴文件
Selection of database paradigm and main code
数据库范式和主码的选择
Wechat applet custom pop-up components
Can I open an account online? Is it safe?
Installation and use of filebeat
Successfully solved the problem of garbled microservice @value obtaining configuration file