题目描述:
二进制手表顶部有 4 个 LED 代表 小时(0-11),底部的 6 个 LED 代表 分钟(0-59)。
每个 LED 代表一个 0 或 1,最低位在右侧。
例如,上面的二进制手表读取 “3:25”。
给定一个非负整数 n 代表当前 LED 亮着的数量,返回所有可能的时间。
示例:
输入: n = 1
返回: ["1:00", "2:00", "4:00", "8:00", "0:01", "0:02", "0:04", "0:08", "0:16", "0:32"]
题解1:
直接暴力 从0:00到11:59 直接判断小时位出现的1个数和分秒位出现的1个数的和是否等于num。
class Solution {
public:
vector<string> readBinaryWatch(int num) {
vector<string> result;
string s="";
for(int i=0;i<12;i++)
for(int j=0;j<60;j++)
if(count1(i)+count1(j)==num)
if(j<10)
result.push_back(s+to_string(i)+":0"+to_string(j));
else
result.push_back(s+to_string(i)+":"+to_string(j));
return result;
}
int count1(int num)//求一个整数的二进制中1的个数
{
int countt = 0;
while (num != 0)
{
num = num & (num - 1);
countt++;
}
return countt;
}
};