问题描述:
二进制手表顶部有 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.