我正在面试并得到这个问题:“编写一个函数,得到2个字符串s,t代表2个小时(格式为HH:MM:SS)。众所周知,s早于t。
该函数需要计算两个给定小时之间包含最多2位数的小时数。
例如-s- 10:59:00,t-11:00:59 - 答案 - 11:00:00,11:00:01,11:00:10,11:00:11。
我试图做while循环并且真的卡住了。不幸的是,我没有通过面试。
如上所述,我如何在java中的两个小时之间过去所有时间(每一秒都是新时间)?非常感谢
答案 0 :(得分:4)
Java 8允许您使用LocalTime。
LocalTime time1 = LocalTime.parse(t1);
LocalTime time2 = LocalTime.parse(t2);
逻辑将要求您计算LocalTime中不同位数的数量,例如
boolean isWinner(LocalTime current) {
String onlyDigits = DateTimeFormatter.ofPattern("HHmmss").format(current);
Set<Character> set = new HashSet<>();
for (int index = 0; index < onlyDigits.length(); index++) {
set.add(onlyDigits.charAt(index));
}
return set.size() <= 2;
}
你可以在这样的时间之间循环
int count = 0;
for (LocalTime current = time1; current.isBefore(time2); current = current.plusSeconds(1)) {
if (isWinner(current)) {
count++;
}
}
那就是它。
这个问题非常适合了解您如何解决问题,以及您是否了解LocalTime API等。