题目描述:
给出一个00:00到23:59的任意时间字符串s,输出可以由这四个数字的任意一个或多个构成的最近的下一个时间(字符串)。
例如:
(1)输入"00:00" 输出 “00:00”
(2)输入"22:47"输出"22:22" 22:47由2,4,7组成,最近的下一个时间是第二天的22:22,可以由其中的2组成。
(3)输入"22:35"输出"22:52" 22:35由2,3,5组成,最近的下一个时间是当天的22:52.
Java代码1:Brute fore
由于给的时间只到分钟,一天中有1440个分钟,也就是1440个时间点。
可以从当前时间点开始,遍历一天的1440个时间点,每到一个时间点,看其所有的数字是否在原时间点字符中存在。
如果不存在,直接break,然后开始遍历下一个时间点;
如果四个数字都存在,说明找到了,换算成题目的时间形式返回即可。
即 “22:35” 的下一个时间点是 “22:52” ,即 “22:52” 的数字组成 属于 “22:35”,如果不属于直接就break 进入下一个时间点。
class Solution {
public String nextClosestTime(String time) {
int hour = Integer.parseInt(time.substring(0, 2));
int min = Integer.parseInt(time.substring(3, 5));
while (true) {
if (++min == 60) { //分钟一到60就进位。
min = 0;
++hour;
hour %= 24;
}
String curr = String.format("%02d:%02d", hour, min);
Boolean valid = true;
for (int i = 0; i < curr.length(); ++i) {
//只要 遍历的时间中的字符 有一个不在输入time字符串中,即不是下一个时间点
if (time.indexOf(curr.charAt(i)) < 0) {
valid = false;
break;
}
}
if (valid) return curr;
}
}
}