您的位置:首页 > 其它

【Leetcode】401. Binary Watch

2017-03-06 15:52 471 查看
方法一:

思路:

枚举。

public class Solution {
Map<Integer, List<String>> minuteMap = new HashMap<Integer, List<String>>() {{
put(0, new ArrayList<String>() {{
add("00");
}});
put(1, new ArrayList<String>() {{
add("01"); add("02"); add("04"); add("08"); add("16"); add("32");
}});
put(2, new ArrayList<String>() {{
add("03"); add("05"); add("06"); add("09"); add("10"); add("12"); add("17"); add("18"); add("20"); add("24"); add("33"); add("34"); add("36"); add("40"); add("48");
}});
put(3, new ArrayList<String>() {{
add("07"); add("11"); add("13"); add("14"); add("19"); add("21"); add("22"); add("25"); add("26"); add("28"); add("35"); add("37"); add("38"); add("41"); add("42"); add("44"); add("49"); add("50"); add("52"); add("56");
}});
put(4, new ArrayList<String>() {{
add("15"); add("23"); add("27"); add("29"); add("30"); add("39"); add("43"); add("45"); add("46"); add("51"); add("53"); add("54"); add("57"); add("58");

}});
put(5, new ArrayList<String>() {{
add("31"); add("47"); add("55"); add("59");
}});
}};
Map<Integer, List<String>> hourMap = new HashMap<Integer, List<String>>() {{
put(0, new ArrayList<String>() {{
add("0");
}});
put(1, new ArrayList<String>() {{
add("1"); add("2"); add("4"); add("8");
}});
put(2, new ArrayList<String>() {{
add("3"); add("5"); add("6"); add("9"); add("10");
}});
put(3, new ArrayList<String>() {{
add("7"); add("11");
}});
}};
public List<String> readBinaryWatch(int num) {
List<String> result=new ArrayList<String>();
for (int i = 0; i <= num; i++) {
int hour = i;
int minute = num - i;
if (hour <= 3 && minute <= 5) {
List<String> hours = hourMap.get(hour);
List<String> minutes = minuteMap.get(minute);
for (int j = 0; j < hours.size(); j++) {
for (int k = 0; k < minutes.size(); k++) {
result.add(hours.get(j) + ":" + minutes.get(k));
}
}
}
}
return result;
}
}Runtime:8ms

方法二:

思路:

枚举,bitCount方法是用来统计参数i转成2进制后有多少个1。

public class Solution {
public List<String> readBinaryWatch(int num) {
List<String> times = new ArrayList<>();
for (int h = 0; h < 12; h++)
for (int m = 0; m < 60; m++)
if (Integer.bitCount(h * 64 + m) == num)
times.add(String.format("%d:%02d", h, m));
return times;
}
}
Runtime:29ms
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: