Fork me on GitHub

Next Closest Time

Description

https://leetcode.com/problems/next-closest-time/

Solution

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
class Solution {
public:
string nextClosestTime(string time) {
string ret = time;
set<int> digits;
digits.insert(time[0] - '0');
digits.insert(time[1] - '0');
digits.insert(time[3] - '0');
digits.insert(time[4] - '0');

int index = 4;
//Process Minute
auto next = digits.lower_bound(time[index] - '0');
if (*next == time[index] - '0') ++next;
cout << *next << endl;
if (next != digits.end()) {
ret[index] = *next + '0';
return ret;
}

ret[index] = *(digits.begin()) + '0';

--index;
next = digits.lower_bound(time[index] - '0');
if (*next == time[index] - '0') ++next;
if (next != digits.end() && *next <= 5) {
ret[index] = *next + '0';
return ret;
}
ret[index] = *(digits.begin()) + '0';

index -= 2;


//Process Hour
next = digits.lower_bound(time[index] - '0');
if (*next == time[index] - '0') ++next;
int bound = (time[0] - '0') == 2 ? 3 : 9;
if (next != digits.end() && *next <= bound) {
ret[index] = *next + '0';
return ret;
}
ret[index] = *(digits.begin()) + '0';
--index;

next = digits.lower_bound(time[index] - '0');
if (*next == time[index] - '0') ++next;
if (next != digits.end() && *next <= 2) {
ret[index] = *next + '0';
return ret;
}

ret[index] = *(digits.begin()) + '0';

return ret;
}
};