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



results matching ""

    No results matching ""