2224. 转化时间需要的最少操作数

题目

给你两个字符串 currentcorrect ,表示两个 24 小时制时间

24 小时制时间"HH:MM" 进行格式化,其中 HH0023 之间,而 MM0059 之间。最早的 24 小时制时间为 00:00 ,最晚的是 23:59

给你两个整数 startgoal ,请你返回将 start 转变成 goal最少位翻转 次数。

在一步操作中,你可以将 current 这个时间增加 151560 分钟。你可以执行这一操作 任意 次数。

返回将 current 转化为 correct 需要的 最少操作数

示例1:

1
2
3
4
5
6
7
8
输入:current = "02:30", correct = "04:35"
输出:3
解释:
可以按下述 3 步操作将 current 转换为 correct :
- 为 current 加 60 分钟,current 变为 "03:30" 。
- 为 current 加 60 分钟,current 变为 "04:30" 。
- 为 current 加 5 分钟,current 变为 "04:35" 。
可以证明,无法用少于 3 步操作将 current 转化为 correct 。

示例2:

1
2
3
输入:current = "11:00", correct = "11:01"
输出:1
解释:只需要为 current 加一分钟,所以最小操作数是 1 。

提示:

  • currentcorrect 都符合 "HH:MM" 格式
  • current <= correct

解法

解法一:

Java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
public int convertTime(String current, String correct) {
String[] cur = current.split(":");
int cur_hour = Integer.parseInt(cur[0]);
int cur_min = Integer.parseInt(cur[1]);
String[] corr = correct.split(":");
int corr_hour = Integer.parseInt(corr[0]);
int corr_min = Integer.parseInt(corr[1]);
// 计算差距分钟数
int minutes = (60 - cur_min) + (corr_hour - cur_hour - 1) * 60 + corr_min;
// 对分钟数直接除就可以
int res = 0;
// 贪心求解
if (minutes >= 60) {
res += minutes / 60;
minutes %= 60;
}
if (minutes >= 15) {
res += minutes / 15;
minutes %= 15;
}
if (minutes >= 5) {
res += minutes / 5;
minutes %= 5;
}
if (minutes >= 1) {
res += minutes;
}
return res;
}
0%