Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。
一、题目描述
401. 二进制手表 - 力扣(LeetCode) (leetcode-cn.com)
二进制手表顶部有 4 个 LED 代表 小时(0-11),底部的 6 个 LED 代表 分钟(0-59)。每个 LED 代表一个 0 或 1,最低位在右侧。
例如,下面的二进制手表读取 "3:25" 。
给你一个整数 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
};
四、总结
一开始想过回溯法,想过暴力,后来看了大佬的答案才发现自己还是太年轻了啊~