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.

. 1  public  class the Test {
 2      public String nextClosestTime (String Time) {
 . 3          char [] RES = time.toCharArray ();
 . 4          char [] = digits new new  char [] {RES [ 0 ], RES [ . 1 ], RES [ . 3 ], res [ . 4 ]};
 . 5          Arrays.sort (digits);
 . 6  
. 7          // right to left to operate res, as long as the current minimum unit time of the replacement, the replacement time after the return 
. 8          res [ . 4 ] = findNext (digits, RES [ . 4 ], ' . 9 ' );
 . 9          IF (res[4] > time.charAt(4)) return String.valueOf(res);
10         
11         res[3] = findNext(digits, res[3], '5');
12         if (res[3] > time.charAt(3)) return String.valueOf(res);
13         
14         res[1] = res[0] == '2' ? findNext(digits, res[1], '3') : findNext(digits, res[1], '9');
15         if (res[1] > time.charAt(1)) return String.valueOf(res);
16         
17         res[0] = findNext(digits, res[0], '2');
18         return String.valueOf(res);
19     }
20 
21     private char findNext(char[] digits, char cur, char upper) {
22         if (cur == upper) return digits[0];
 23          // find cur position, then add 1 to obtain the next position 
24          int POS = Arrays.binarySearch (digits, cur) + 1 ;
 25          // if the number of the next number or the original position, or exceeds the upper limit number, then proceeds to the next 
26 is          the while (POS < . 4 && (digits [POS] == CUR || digits [POS]> Upper)) {
 27              POS ++ ;
 28          }
 29          return POS == . 4 digits [? 0 ]: digits [POS];
 30      }
 31 is }

 

Guess you like

Origin www.cnblogs.com/beiyeqingteng/p/10934970.html