-
Notifications
You must be signed in to change notification settings - Fork 306
Expand file tree
/
Copy pathbinary-watch.js
More file actions
39 lines (32 loc) · 890 Bytes
/
binary-watch.js
File metadata and controls
39 lines (32 loc) · 890 Bytes
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
// Source : https://leetcode.com/problems/binary-watch/
// Author : Han Zichi
// Date : 2016-09-18
/**
* @param {number} num
* @return {string[]}
*/
var readBinaryWatch = function(num) {
let hours = [1, 2, 4, 8];
let minutes = [1, 2, 4, 8, 16, 32];
let ans = [];
dfs(num, 0, 0, 0, 0);
function dfs(left, a, b, hoursTotal, minutesTotal) {
if (hoursTotal >= 12 || minutesTotal >= 60)
return;
if (left === 0) {
let str = hoursTotal + ":";
str += minutesTotal < 10 ? '0' + minutesTotal : minutesTotal;
ans.push(str);
return;
}
// add i to hour
for (let i = a; i < 4; i++) {
dfs(left - 1, i + 1, b, hoursTotal + hours[i], minutesTotal);
}
// add i to minute
for (let i = b; i < 6; i++) {
dfs(left - 1, a, i + 1, hoursTotal, minutesTotal + minutes[i]);
}
}
return Array.from(new Set(ans));
};