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:
"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:
"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.
Solution
(1) Java
(2) Python
class Solution:
def nextClosestTime(self, time):
"""
:type time: str
:rtype: str
"""
digits1 = set()
for c in time:
if c == ":":
continue
digits1.add(int(c))
digits2 = list(digits1)
digits2.sort()
rst = ""
minReady = False
hourReady = False
times = time.split(":")
minu = int(times[1])
hour = int(times[0])
carry = 0
for i in range(minu+1, 60):
d1 = i%10
d2 = int(i/10)%10
#print("mini={0},d1={1},d2={2}".format(i,d1,d2))
if d1 in digits1 and d2 in digits1:
rst = str(d2) + str(d1)
minReady = True
break
if minReady == False:
rst = str(digits2[0]) + str(digits2[0])
carry = 1
rst = ":" + rst
if carry == 1:
for i in range(hour+1, 24):
d1 = i%10
d2 = int(i/10)%10
if d1 in digits1 and d2 in digits1:
rst = str(d2) + str(d1) + rst
hourReady = True
break
if hourReady == False:
rst = str(digits2[0]) + str(digits2[0]) + rst
else:
rst = str(int(hour/10)%10) + str(hour%10) + rst
return rst
(3) Scala