原题链接

枚举每一种亮灯状态,如果当前亮灯的数目等于 num,而且当前表示的时间合法,就记录下来。

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
class Solution {
public:
vector<string> readBinaryWatch(int num) {
vector<string> res;
char str[10];
for (int i = 0; i < 1 << 10; i++) {
int s = 0;
int b = i;
// 使用 lowbit 快速计算二进制中 1 的个数
while (b) {
s++;
b = b & (b - 1);
}
if (s == num) {
int h = i >> 6;
int m = i & 63;
if (h < 12 && m < 60) {
// 用 sprintf 格式化输出
sprintf(str, "%d:%02d", h, m);
res.push_back(str);
}
}
}
return res;
}
};