二进制手表顶部有 4 个 LED 代表小时(0-11),底部的 6 个 LED 代表分钟(0-59)。
每个 LED 代表一个 0 或 1,最低位在右侧。
例如,上面的二进制手表读取 “3:25”。
给定一个非负整数 n 代表当前 LED 亮着的数量,返回所有可能的时间。
有点头疼的一道题目,刚开始尝试回溯,太烦了,然后就。。
首先,先要考虑时间点的特性,比如7点59分,7的二进制是111,59的二进制是111011,二进制表示中的1就表示此处了灯亮,反过来,如果题目有8个灯亮了,那个7:59肯定是一个答案,同时其他答案用二进制表示也肯定有8个一,所以,我们只要穷举小时0-11,0-59,并验证时间的亮灯数量是否是题目要求的数量。
class Solution {
public List<String> readBinaryWatch(int num) {
List<String>list=new ArrayList<String>();
for(int i=0;i<12;i++)
{
for(int j=0;j<=59;j++)
{
if(getBit(i)+getBit(j)==num)
{
if(j<10)
list.add(i+":"+"0"+j);
else
list.add(i+":"+j);
}
}
}
return list;
}
public int getBit(int num)
{
int count=0;
String w=Integer.toBinaryString(num);
for(int i=0;i<w.length();i++)
{
if(w.charAt(i)=='1')
count++;
}
return count;
}
}