这是我参与11月更文挑战的第24天,活动详情查看:2021最后一次更文挑战。
题目描述:
401. 二进制手表 - 力扣(LeetCode) (leetcode-cn.com)
二进制手表顶部有 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 | css复制代码输入:turnedOn = 1 |
示例二
1 | ini复制代码输入: turnedOn = 9 |
提示:
0 <= turnedOn <= 10
思路分析
枚举时分
由图可知,上一行代表小时,有4个比特表示。
下一行代表分钟,有6个比特表示。
而比特 0
代表灯灭,1
代表灯亮,所以题目给出亮灯的个数,即比特值中 1
的个数,
而求 1
的个数,我们之前已经做过了,可以直接使用sdk的api,也可以手动实现。
要求解本题,简单点的话我们可以2遍循环
枚举小时和分钟的所有可能值,然后求出当中 1
的个数,如果等于 turnedOn
,则为答案之一。
然后还有个要注意的就是 小时不以 0
开头,分钟 个位数的情况下必须得有 0
.
AC代码
1 | Kotlin复制代码class Solution { |
总结
这题不错,但这表肯定没人买 - -
参考
二进制手表 - 二进制手表 - 力扣(LeetCode) (leetcode-cn.com)
本文转载自: 掘金