
题目
1、题目描述
给你两个字符串 c u r r e n t current current 和 c o r r e c t correct correct ,表示两个 24 小时制时间 。
24 小时制时间 按"HH:MM"
进行格式化,其中 HH 在 00 和 23 之间,而 MM 在 00 和 59 之间。最早的 24 小时制时间为00:00
,最晚的是23:59
。
在一步操作中,你可以将 c u r r e n t current current 这个时间增加 1、5、15 或 60 分钟。你可以执行这一操作 任意 次数。
返回将 c u r r e n t current current 转化为 c o r r e c t correct correct 需要的 最少操作数 。
2、原题链接
解题报告
1、解题思路
(1)由于这个表只能增加时间不能减少时间而且不会从23:00到01:00所以是水题。
(2)将当前时间与要求时间转换成分钟数再进行比较。
(3)两数之差大于60那么每次增加60分钟。大于15小于60每次增加15分钟。以此类推,直到时间一致。
2、解题方法
贪心算法
2、代码详解
int convertTime(char * current, char * correct){
int HH = 0;
int CHH = 0;
int ans = 0;
HH = (current[0] - '0')*10*60;
HH += (current[1] - '0')*60;
HH += (current[3] - '0')*10;
HH += (current[4] - '0');
CHH = (correct[0] - '0')*10*60;
CHH += (correct[1] - '0')*60;
CHH += (correct[3] - '0')*10;
CHH += (correct[4] - '0');
while(CHH != HH){
if(CHH - HH >= 60){
++ans;
HH += 60;
}else if(CHH - HH >= 15){
++ans;
HH += 15;
}else if(CHH - HH >= 5){
++ans;
HH += 5;
}else if(CHH - HH >= 1){
++ans;
HH += 1;
}
}
return ans;
}
总结
想想是不是还有别的解法。。。