401. 二进制手表

题目来源: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" 。

 方法一:枚举 时和分

/**
 * @param {number} turnedOn
 * @return {string[]}
 */
 var readBinaryWatch = function(turnedOn) {
    let res = [];
    for(let h=0;h<12;h++){
        for(let m=0;m<60;m++){
            let len = h.toString(2).split('0').join('').length + m.toString(2).split('0').join('').length;
            if(len === turnedOn){
                res.push(h+':'+m.toString(10).padStart(2,'0'));
            }
        }
    }
    return res;
};

let turnedOn = 1;
console.log(turnedOn, readBinaryWatch(turnedOn))

方法二:二进制枚举

/**
 * @param {number} turnedOn
 * @return {string[]}
 */
 var readBinaryWatch = function(turnedOn) {
    let res = [];
    for(let i=0;i<1024;i++){
        let h = i>>6, m = i & 63;
        if(h<12 && m < 60 && i.toString(2).split('0').join('').length === turnedOn){
            res.push(h+':'+m.toString(10).padStart(2,'0'));
        }
    }
    return res;
};

turnedOn = 1;
console.log(turnedOn, readBinaryWatch(turnedOn))

示例 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
posted @ 2021-06-21 09:35  尖子  阅读(86)  评论(0编辑  收藏  举报