class Solution { public $result = []; public $nums = [1, 2, 4, 8, 1, 2, 4, 8, 16, 32]; // LED 转换成一维数组 /** * @param Integer $turnedOn * @return String[] */ function readBinaryWatch($turnedOn) { // h 最多亮 3 个 m 最多亮 5个 //if ($turnedOn < 9) { $this->dfs($turnedOn, 0, 0, 0); //} return $this->result; } /** * h 4位 m 6位 可以转化成 10 选 n 符合时间的组合 这个 n 就是 $turnedOn 也就是亮着的 LED 的数量 * @param $turnedOn * @param $h //当前小时 * @param $m //当前分钟 * @param $start //设置下次搜索起始点 * @return void */ function dfs($turnedOn, $h, $m, $start) { if ($turnedOn == 0) { $this->result[] = $h.':'.($m < 10 ? '0'.$m : $m); return; } if ($turnedOn < 0) { return; } for ($i = $start; $i < 10; $i++) { if ($i < 4 && $h + $this->nums[$i] < 12) { $this->dfs($turnedOn - 1, $h + $this->nums[$i], $m, $i + 1); } if ($i >= 4 && $m + $this->nums[$i] < 60) { $this->dfs($turnedOn - 1, $h, $m + $this->nums[$i], $i + 1); } } } }
copy success
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
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