LeetCode Next Closest Time
Posted Dylan_Java_NYC
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode Next Closest Time相关的知识,希望对你有一定的参考价值。
原题链接在这里:https://leetcode.com/problems/next-closest-time/description/
题目:
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.
题解:
用当前time已经出现的四个数字,组成新的time. 找diff最小的新time.
Time Complexity: O(1). 共有4^4种组合.
Space: O(1). size为4的HashSet.
AC Java:
1 class Solution { 2 public String nextClosestTime(String time) { 3 if(time == null || time.length() != 5){ 4 throw new IllegalArgumentException("Invalid operation"); 5 } 6 7 int cur = Integer.valueOf(time.substring(0,2)) * 60 + Integer.valueOf(time.substring(3)); 8 HashSet<Integer> hs = new HashSet<Integer>(); 9 for(int i = 0; i<time.length(); i++){ 10 if(time.charAt(i) != ‘:‘){ 11 hs.add(time.charAt(i)-‘0‘); 12 } 13 } 14 15 int minDiff = 24*60; 16 int res = cur; 17 for(int h1 : hs){ 18 for(int h2 : hs){ 19 if(h1*10+h2 < 24){ 20 for(int m1 : hs){ 21 for(int m2 : hs){ 22 if(m1*10+m2 < 60){ 23 int next = (h1*10+h2)*60 + (m1*10+m2); 24 int diff = Math.floorMod(next-cur, 24*60); 25 if(diff > 0 && diff < minDiff){ 26 res = next; 27 minDiff = diff; 28 } 29 } 30 } 31 } 32 } 33 } 34 } 35 36 return String.format("%02d:%02d", res/60, res%60); 37 } 38 }
以上是关于LeetCode Next Closest Time的主要内容,如果未能解决你的问题,请参考以下文章
[LeetCode] Next Closest Time 下一个最近时间点