您的位置:首页 > 其它

681. Next Closest Time

2017-09-24 11:01 369 查看
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 nex
a6b2
t day's time since it is smaller


思路:与其思考怎么变换,不如直接求出所有可能再一个个计算来的快

import java.util.HashSet;
import java.util.Set;

class Solution {
public String nextClosestTime(String time) {
Set<Integer> s = new HashSet<Integer>();
s.add(time.charAt(0)-'0');
s.add(time.charAt(1)-'0');
s.add(time.charAt(3)-'0');
s.add(time.charAt(4)-'0');

Set<String> ss = new HashSet<String>();
for(int i : s)
for(int j : s)
for(int k : s)
for(int l : s)
ss.add(""+i+j+":"+k+l);

int min = Integer.MAX_VALUE;
String ret = "";
for(String t : ss) {
int inteval = get(t, time);
if(inteval < min) {
min = inteval;
ret = t;
}
}

return ret;
}

private int get(String t, String time) {
int h1 = Integer.valueOf(t.substring(0, 2)), h2 = Integer.valueOf(time.substring(0, 2));
int m1 = Integer.valueOf(t.substring(3, 5)), m2 = Integer.valueOf(time.substring(3, 5));
if(h1>=24||h2>=24||m1>=60||m2>=60)	return Integer.MAX_VALUE;
int diff = (h1-h2)*60 + (m1-m2);
if(diff <= 0) diff += 24*60;
return diff;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: