681. Next Closest Time
Given a time
represented in the format "HH:MM"
, form the next closest time by reusing the current digits. There is no limit on how many times a digit can be reused.
You may assume the given input string is always valid. For example, "01:34"
, "12:09"
are all valid. "1:34"
, "12:9"
are all invalid.
Example 1:
Input: time = "19:34"
Output: "19:39"
Explanation: The next closest time choosing from digits 1, 9, 3, 4, is 19:39, which occurs 5 minutes later.
It is not 19:33, because this occurs 23 hours and 59 minutes later.
Example 2:
Input: time = "23:59"
Output: "22:22"
Explanation: The next closest time choosing from digits 2, 3, 5, 9, is 22:22.
It may be assumed that the returned time is next day's time since it is smaller than the input time numerically.
Constraints:
time.length == 5
time
is a valid time in the form"HH:MM"
.0 <= HH < 24
0 <= MM < 60
Solution:
class Solution {
public String nextClosestTime(String time) {
// Extract the hour and minute from the input time string
int hour = Integer.parseInt(time.substring(0, 2));
int min = Integer.parseInt(time.substring(3, 5));
// Begin an infinite loop to find the next closest time
while (true) {
// Increment the minute by one
min++;
// If the minute reaches 60, reset to 0 and increment the hour
if (min == 60) {
min = 0; // Reset minutes to 0
hour++; // Increment hour by 1
hour = hour % 24; // Use modulo to ensure the hour wraps around after 23
}
// Format the current time (hour and minute) back into a string in the format "HH:MM"
String curr = String.format("%02d:%02d", hour, min);
// Initialize a boolean variable to check if the current time is valid
Boolean valid = true;
// Iterate through each character in the formatted time string
for (int i = 0; i < curr.length(); i++) {
// Check if the current character exists in the original time string
if (time.indexOf(curr.charAt(i)) < 0) {
valid = false; // If any character does not exist, mark as invalid and break the loop
break;
}
}
// If the current time is valid (all characters exist in the original time string), return it
if (valid) {
return curr;
}
}
}
}
Format String
"%02d:%02d"
:
- The format string
"%02d:%02d"
specifies how the output string should be structured.%02d
:
%
is the format specifier symbol.0
is a flag that indicates that the number should be padded with zeros if it's not long enough (for example, if it's 7, it will be padded to07
).2
specifies the minimum width, meaning the number should be at least 2 digits long.d
stands for "decimal integer," meaning that the input will be an integer value.:
is a literal colon character that will appear between the hour and minute.- The second
%02d
: Works exactly the same as the first one, but it applies to the minute.The
indexOf()
method in Java is used to find the index (position) of a specified character or substring within a string. If the character or substring is found,indexOf()
returns the index of the first occurrence. If it is not found, it returns-1
.