问题描述:
二进制手表顶部有 4 个 LED 代表 小时(0-11),底部的 6 个 LED 代表 分钟(0-59)。每个 LED 代表一个 0 或 1,最低位在右侧。
题解:
public List<String> readBinaryWatch(int turnedOn) {
// 返回集合,先整个集合
List<String> list = new ArrayList<>();
// 0:00 到 11:59 遍历
for (int i = 0; i <= 12; i++) {
for (int j = 0; j <= 60; j++) {
if (count(i) + count(j) == turnedOn) {
list.add(i+":"+( j>10 ? j + "" : "0" + j));
}
}
}
return list;
}
/**
* 确定数字对应二进制中 1 的个数
* @param num
* @return
*/
int count(int num) {
int res = 0;
while (num != 0) {
num = num & (num - 1);
res ++;
}
return res;
}
知识点:
这里用到
是确定一个十位制数转化为二进制数后是否有 1 的,如果有num != 0 ,如果没有num == 0.