leetcode 401. 二进制手表

二进制手表顶部有 4 个 LED 代表 小时(0-11),底部的 6 个 LED 代表 分钟(0-59)。每个 LED 代表一个 0 或 1,最低位在右侧。

例如,下面的二进制手表读取 "3:25" 。


(图源:WikiMedia - Binary clock samui moon.jpg ,许可协议:Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) )

给你一个整数 turnedOn ,表示当前亮着的 LED 的数量,返回二进制手表可以表示的所有可能时间。你可以 按任意顺序 返回答案。

小时不会以零开头:

例如,"01:00" 是无效的时间,正确的写法应该是 "1:00" 。
分钟必须由两位数组成,可能会以零开头:

例如,"10:2" 是无效的时间,正确的写法应该是 "10:02" 。
 

示例 1:

输入:turnedOn = 1
输出:["0:01","0:02","0:04","0:08","0:16","0:32","1:00","2:00","4:00","8:00"]
示例 2:

输入:turnedOn = 9
输出:[]
 

解释:

0 <= turnedOn <= 10

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/binary-watch
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

采用暴力,先统计出0-60每个数子出现1的个数,小时只可能0-3个1,分钟0-5个1。两层for循环判断。

    public List<String> readBinaryWatch(int turnedOn) {
        List<String> value = new ArrayList<>();
        if (turnedOn > 8) {
            return value;
        }
        ArrayList<Integer>[] list = (ArrayList<Integer>[])new ArrayList<?>[6];
        list[0] = new ArrayList<Integer>(){{
            add(0);
        }};
        for (int i = 1; i < 60; i++) {
            int n = 1;
            int item = i;
            while ((item & (item - 1)) != 0) {
                n++;
                item = (item & (item - 1));
            }
            List<Integer> strings = list[n];
            if (strings == null) {
                strings = new ArrayList<>();
                list[n] = (ArrayList<Integer>) strings;
            }
            strings.add(i);
        }
        for (int i = 0; i < 4; i++) {
            int b = turnedOn - i;
            if (b > 5 || b < 0) {
                continue;
            }
            ArrayList<Integer> aa = list[i];
            ArrayList<Integer> ba = list[b];

            for (Integer h : aa) {
                if (h > 11) {
                    break;
                }
                for (Integer m : ba) {
                    value.add(h + ":" + (m > 9 ? m : "0" + m));
                }
            }
        }
        return value;
    }

posted @ 2021-05-08 14:25  旺仔古李  阅读(98)  评论(0编辑  收藏  举报