Solution#1
public class Solution {
public List<String> readBinaryWatch(int num) {
if (num < 0 || num > 10)
throw new IllegalArgumentException("the argument for readBinaryWatch is illegal.");
List<List<String>> hours = new ArrayList<>();
List<List<String>> minutes = new ArrayList<>();
hours.add(Arrays.asList("0"));
hours.add(Arrays.asList("1", "2", "4", "8"));
hours.add(Arrays.asList("3", "5", "6", "9", "10"));
hours.add(Arrays.asList("7", "11"));
minutes.add(Arrays.asList("00"));
minutes.add(Arrays.asList("01", "02", "04", "08", "16", "32"));
minutes.add(Arrays.asList("03", "05", "06", "09", "10", "12", "17", "18", "20", "24", "33", "34", "36", "40", "48"));
minutes.add(Arrays.asList("07", "11", "13", "14", "19", "21", "22", "25", "26", "28", "35", "37", "38", "41", "42", "44", "49", "50", "52", "56"));
minutes.add(Arrays.asList("15", "23", "27", "29", "30", "39", "43", "45", "46", "51", "53", "54", "57", "58"));
minutes.add(Arrays.asList("31", "47", "55", "59"));
List<String> result = new ArrayList<>();
for (int i = 0; i <= num && i < 4; i++) {
int j = num - i;
if (j > 5)
continue;
for (int k = 0; k < hours.get(i).size(); k++) {
for (int l = 0; l < minutes.get(j).size(); l++) {
result.add(hours.get(i).get(k) + ":" + minutes.get(j).get(l));
}
}
}
return result;
}
}
Problem#1
- 把小時和分鐘所有的情況列出來匹配,時間複雜度可以接受(69.78%),但是浪費了空間,而且操作複雜,尋找其他方法
- 把Solution#1中的List換成String[][]會更快(91.39%)