https://leetcode.com/problems/binary-watch/description/
Solution 1. Loop through hour and minute, check the total bits
vector<string> readBinaryWatch(int num) {
vector<string> res;
for(int h=0; h<12; h++) {
for(int m=0; m<60; m++) {
if(bitset<10> (h<<6 | m).count() == num)
res.push_back(to_string(h) + ":" + (m<10 ? "0":"") + to_string(m));
}
}
return res;
}
Solution 2. Get all possible numbers with num bits
void combination(int n, int N, int s, vector<int>& c) {
if(n>N || n==0) return;
if(n==1) {
for(int i=0;i<N;i++) {
c.push_back(s + (1<<i));
}
return;
}
combination(n, N-1, s, c);
combination(n-1, N-1, s + (1<<(N-1)), c);
}
vector<string> readBinaryWatch(int num) {
if(num == 0) return vector<string> {"0:00"};
vector<string> res;
vector<int> c;
combination(num, 10, 0, c);
for(auto x : c) {
int m = x & 15;
int s = x >> 4;
if(m<12 && s<60) res.push_back(to_string(m) + ":" + (s<10? "0":"") + to_string(s));
}
return res;
}
No comments:
Post a Comment