本想用递归的方式写,但是比较麻烦,所以采用了一种比较暴力的方法。
class Solution {
public:
int numOfOne(int num)
{
int count=0;
while(num!=0)
{
if(num%2==1)
count++;
num/=2;
}
return count;
}
vector<string> readBinaryWatch(int num) {
vector<int> oneNum(60,0);
for(int i=0;i<=59;i++)
oneNum[i]=numOfOne(i);
int numOneInHour=0;
int numOneInMinute=0;
vector<string> time;
vector<string> hour;
vector<string> minute;
for(numOneInHour=0;numOneInHour<=num;numOneInHour++)
{
numOneInMinute=num-numOneInHour;
if(numOneInHour<=4&&numOneInMinute<=6)
{
minute.clear();
hour.clear();
for(int i=0;i<=11;i++)
{
if(oneNum[i]==numOneInHour)
{
hour.push_back(to_string(i));
//cout<<i<<" ";
}
}
//cout<<endl;
for(int i=0;i<=59;i++)
{
if(oneNum[i]==numOneInMinute)
{
if(i<10)
{
minute.push_back("0"+to_string(i));
}
else
minute.push_back(to_string(i));
//cout<<i<<" ";
}
}
//cout<<endl;
for(int i=0;i<hour.size();i++)
{
for(int j=0;j<minute.size();j++)
time.push_back(hour[i]+":"+minute[j]);
}
}
}
return time;
}
};