g0401_0500.s0401_binary_watch.Solution Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of leetcode-in-java Show documentation
Show all versions of leetcode-in-java Show documentation
Java-based LeetCode algorithm problem solutions, regularly updated
package g0401_0500.s0401_binary_watch;
// #Easy #Bit_Manipulation #Backtracking
import java.util.ArrayList;
import java.util.List;
public class Solution {
public List readBinaryWatch(int turnedOn) {
List times = new ArrayList<>();
for (int hour = 0; hour <= 11; hour++) {
for (int minutes = 0; minutes <= 59; minutes++) {
readBinaryWatchHelper(turnedOn, times, hour, minutes);
}
}
return times;
}
private void readBinaryWatchHelper(
int turnedOn, List selectedTimes, int hour, int minutes) {
if (isValidTime(turnedOn, hour, minutes)) {
selectedTimes.add(getTimeString(hour, minutes));
}
}
private String getTimeString(int hour, int minutes) {
StringBuilder time = new StringBuilder();
time.append(hour);
time.append(':');
if (minutes < 10) {
time.append('0');
}
time.append(minutes);
return time.toString();
}
private boolean isValidTime(int turnedOn, int hour, int minutes) {
int counter = 0;
while (hour != 0) {
if ((hour & 1) == 1) {
counter++;
}
hour >>>= 1;
}
if (counter > turnedOn) {
return false;
}
while (minutes != 0) {
if ((minutes & 1) == 1) {
counter++;
}
minutes >>>= 1;
}
return counter == turnedOn;
}
}