题目:你完成的完整对局数
一款新的在线电子游戏在近期发布,在该电子游戏中,以 刻钟 为周期规划若干时长为 15 分钟 的游戏对局。 这意味着,在 HH:00、HH:15、HH:30 和 HH:45 ,将会开始一个新的对局,其中 HH 用一个从 00 到 23 的整数表示。 游戏中使用 24 小时制的时钟 ,所以一天中最早的时间是 00:00 ,最晚的时间是 23:59 。 给你两个字符串 startTime 和 finishTime ,均符合 "HH:MM" 格式,分别表示你 进入 和 退出 游戏的确切时间, 请计算在整个游戏会话期间,你完成的 完整对局的对局数 。 例如,如果 startTime = "05:20" 且 finishTime = "05:59" ,这意味着你仅仅完成从 05:30 到 05:45 这一个完整对局。 而你没有完成从 05:15 到 05:30 的完整对局,因为你是在对局开始后进入的游戏;同时,你也没有完成从 05:45 到 06:00 的完整对局,因为你是在对局结束前退出的游戏。 如果 finishTime 早于 startTime ,这表示你玩了个通宵(也就是从 startTime 到午夜,再从午夜到 finishTime)。 假设你是从 startTime 进入游戏,并在 finishTime 退出游戏,请计算并返回你完成的 完整对局的对局数 。 示例一: 输入:startTime = "12:01", finishTime = "12:44" 输出:1 解释:你完成了从 12:15 到 12:30 的一个完整对局。 你没有完成从 12:00 到 12:15 的完整对局,因为你是在对局开始后的 12:01 进入的游戏。 你没有完成从 12:30 到 12:45 的完整对局,因为你是在对局结束前的 12:44 退出的游戏。 输入:startTime = "20:00", finishTime = "06:00" 输出:40 解释:你完成了从 20:00 到 00:00 的 16 个完整的对局,以及从 00:00 到 06:00 的 24 个完整的对局。 16 + 24 = 40
解答:
public int numberOfRonds(String startTime, String finishTime) { int startH = Integer.valueOf(startTime.substring(0, 2)); int startM = Integer.valueOf(startTime.substring(3, 5)); int endH = Integer.valueOf(finishTime.substring(0, 2)); int endM = Integer.valueOf(finishTime.substring(3, 5)); if (startH == endH && startM < endM) { if (startM % 15 != 0) { startM = (startM / 15 + 1) * 15; } return (endM - startM) / 15; } int count = 0; if (startM != 0) { count += (60 - startM) / 15; startH++; } if (endM != 0) { count += endM / 15; } if (endH < startH) { endH += 24; } count += (endH - startH) * 4; return count; } //主要的处理是分钟间隔,先对分钟间隔做好判断,再处理小时的内容。