A binary watch has 4 LEDs on the top which represent the hours (0-11), and the 6 LEDs on the bottom represent the minutes (0-59).
Each LED represents a zero or one, with the least significant bit on the right.
![](https://upload.wikimedia.org/wikipedia/commons/8/8b/Binary_clock_samui_moon.jpg)
For example, the above binary watch reads "3:25".
Given a non-negative integer n which represents the number of LEDs that are currently on, return all possible times the watch could represent.
Example:
Input: n = 1
Return: ["1:00", "2:00", "4:00", "8:00", "0:01", "0:02", "0:04", "0:08", "0:16", "0:32"]
首先定义一个0000000000的字符串,然后回溯计数n个1出现的位置,最后把这个遍历好的字符串返回。最后对这个01字符串转换成十进制,同时注意hour<=11,minute<=59;
class Solution {
public:
void getResult(int x,int count,int num,vector<string> &temp,string &mid)
{
if(count == num)
{
temp.push_back(mid);
return;
}
for(int i=x;i<10;i++)
{
mid[i] = '1';
getResult(i+1,++count,num,temp,mid);
--count;
mid[i]= '0';
}
return;
}
vector<string> readBinaryWatch(int num) {
string s = "0000000000";
vector<string> temp;
getResult(0,0,num,temp,s);
vector<string> result;
for(int i=0;i<temp.size();i++)
{
string m = temp[i];
string last="";
int hour = 0;
for(int i=3;i>=0;i--)
{
if(m[i] == '1')
hour += pow(2,3-i);
}
if(hour>11) continue;
stringstream ss;
ss<<hour;
last += ss.str();
last +=":";
int minute = 0;
for(int i=9;i>=4;i--)
{
if(m[i] == '1')
minute += pow(2,9-i);
}
if(minute>59) continue;
if(minute/10==0)
last += '0';
stringstream ss1;
ss1<<minute;
last += ss1.str();
result.push_back(last);
}
return result;
}
};