题目:
思路:
写题目的时候注意问的到底是什么别陷入误区把题目复杂化,题目说了,输入的只是亮的个数,找几个对应的情况! 只是个数,那么我们可以反推,枚举所有时间点亮的个数如果累加是目标值就把这个时间转化成string形式。
class Solution {
public:
vector<string> readBinaryWatch(int turnedOn) {
//注意到每个时间都有一个二进制表示 我暴力搜索下所有时间的二进制表示位数。等于就返回
vector<string>res;
for(int i=0;i<12;i++){
for(int j=0;j<60;j++){
if(count(i)+count(j)==turnedOn){
string s;
s=to_string(i)+":"+(j < 10 ? "0" : "")+to_string(j);
res.push_back(s);
}
}
}
return res;
}
int count(int n){
int num=0;
while(n>0){
n= n&(n-1);
num++;
}
return num;
}
};
注意到1的个数还可以用自带函数:
__builtin_popcount() 来统计