刷题日记-401. 二进制手表

199 阅读2分钟

Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情

一、题目描述

401. 二进制手表 - 力扣(LeetCode) (leetcode-cn.com)

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

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

image.png

给你一个整数 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

二、思路分析

小时总共11,分钟总共59。双重循环所有的时间。将十进制时间转换成二进制时间。数一下1的个数是否和入参相等。若一致,则加入到结果中, 注意分钟的写法和0的情况。

三、AC 代码

/**
 * @param {number} turnedOn
 * @return {string[]}
 */
var readBinaryWatch = function(turnedOn) {
    let result = [];
    for(var i = 0; i <= 11; i++){
        for(var j = 0; j <= 59; j++) {
            var binaryChar = i.toString(2) +  j.toString(2);
            var regex= new RegExp('1','g')
            var count = binaryChar.match(regex);
            if(count){
                if(count.length === turnedOn){
                    var zaroPadJ = parseInt(j) < 10 ? '0' + j : j;
                    result.push(i + ':' + zaroPadJ);
                }
            }

        }
    }
    return turnedOn === 0 ? ["0:00"] : result
};

四、总结

一开始想过回溯法,想过暴力,后来看了大佬的答案才发现自己还是太年轻了啊~