401. Binary Watch

其实不太懂为什么这道题会标成easy…………感觉分明是combination的升级版嘛

思路就是因为最多会形成6个灯的,所以从0-6生成所有可能的binary组合然后分开组合

 

 1     public List<String> readBinaryWatch(int num) {
 2         List<String> res = new ArrayList<>();
 3         if(num < 0) {
 4             return res;
 5         }
 6         Map<Integer, List<String>> map = new HashMap<>();
 7         for(int i = 0; i <= num; i++) {
 8             char[] cur = new char[6];
 9             Arrays.fill(cur, '0');
10             List<String> curRes = new ArrayList<>();
11             generate(curRes, 0, 0, i, cur);
12             map.put(i, curRes);
13         }
14         for(int i = 0; i <= num && i <= 4; i++) {
15             List<String> hour = map.get(i);
16             List<String> min = map.get(num - i);
17             for(String h: hour) {
18                 int hourInt = Integer.parseInt(h, 2);
19                 if(hourInt >= 12) {
20                     continue;
21                 }
22                 for(String m: min) {
23                     int minInt = Integer.parseInt(m, 2);
24                     if(minInt >= 60) {
25                         continue;
26                     }
27                     StringBuilder sb = new StringBuilder();
28                     sb.append(hourInt);
29                     sb.append(':');
30                     if(minInt <= 9) {
31                         sb.append('0');
32                     }
33                     sb.append(minInt);
34                     res.add(sb.toString());
35                 }
36             }
37         }
38         return res;
39     }
40     
41     private void generate(List<String> res, int index, int cnt, int n, char[] cur) {
42         if(cnt == n) {
43             res.add(new String(cur));
44             return;
45         }
46         for(int i = index; i < 6; i++) {
47             cur[i] = '1';
48             generate(res, i + 1, cnt + 1, n, cur);
49             cur[i]  = '0';
50         }
51     }

 

posted @ 2016-10-24 08:28  warmland  阅读(168)  评论(0编辑  收藏  举报