首页 > 其他 > 详细

401. 二进制手表

时间:2021-06-21 11:42:32      阅读:13      评论:0      收藏:0      [点我收藏+]

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

401. 二进制手表

原文:https://www.cnblogs.com/yanjianjiang/p/14911286.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!