401. Binary Watch
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.
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 = 1code:
Return: ["1:00", "2:00", "4:00", "8:00", "0:01", "0:02", "0:04", "0:08", "0:16", "0:32"]
class Solution {
public:
vector<string> readBinaryWatch(int num) {
vector<string> result;
int time=0;
backtrack(num, 0, time, result);
return result;
}
private:
void backtrack(int num, int startBit, int time, vector<string>& result) {
if (num == 0) {
addTimeToResult(time, result);
return;
}
for (int i = startBit; i < 10; i++) {
backtrack(num - 1, i + 1, time | (1 << i), result); // time | (1 << i)
}
}
void addTimeToResult(int time, vector<string>& result)
{
int m = time & 0x3f, h = time >> 6;
if (m < 60 && h < 12)
{
string mine;
string hour=to_string(h);
string last;
if(m<10)
mine="0"+to_string(m);
else
mine=to_string(m);
last=hour + ":" + mine;
result.push_back(last);
}
}
};