Binary Watch LeetCode solution in JavaScript

1
/**
2
* @param {number} turnedOn
3
* @return {string[]}
4
*/
5
var readBinaryWatch = function (turnedOn) {
6
// _ _ _ _ 0-11 => 0000 - 1100
7
// _ _ _ _ _ _ 0-59 => 111011
8

9
let minutes = new Map();
10
let hours = new Map();
11
for (let i = 0; i < 12; i++) {
12
let ones = 0;
13
for (let j = 0; j < 5; j++) {
14
ones += (i >> j) & 1;
15
}
16
if (hours.has(ones)) {
17
prev = hours.get(ones);
18
prev.push(i);
19
hours.set(ones, prev);
20
} else {
21
hours.set(ones, [i]);
22
}
23
//0001 1
24
//0010 2
25
//0011 3
26
//0100 4
27
//0101 5
28
//0110 6
29
//0111 7
30
//1000 8
31
//1001 9
32
//1010 10
33
//1011 11
34
}
35

36
for (let i = 0; i < 60; i++) {
37
let ones = 0;
38
for (let j = 0; j < 7; j++) {
39
ones += (i >> j) & 1;
40
}
41

42
if (minutes.has(ones)) {
43
let prev = minutes.get(ones);
44
prev.push(i);
45
minutes.set(ones, prev);
46
} else {
47
minutes.set(ones, [i]);
48
}
49
}
50
let result = [];
51
for (let i = 0; i <= turnedOn; i++) {
52
if (hours.has(i)) {
53
let h = hours.get(i);
54
for (let j = 0; j < h.length; j++) {
55
let ones = turnedOn - i;
56
if (minutes.has(ones)) {
57
let min = minutes.get(ones);
58
for (let k = 0; k < min.length; k++) {
59
let minlen = (min[k] + "").length;
60
if (minlen == 1) {
61
minlen = "0" + min[k];
62
} else {
63
minlen = min[k];
64
}
65
result.push(h[j] + ":" + minlen);
66
}
67
}
68
}
69
}
70
}
71
return result;
72
};

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0