二进制手表
概述:二进制手表顶部有 4 个 LED 代表 小时(0-11),底部的 6 个 LED 代表 分钟(0-59)。每个 LED 代表一个 0 或 1,最低位在右侧。
输入:turnedOn = 1
输出:["0:01","0:02","0:04","0:08","0:16","0:32","1:00","2:00","4:00","8:00"]
输入:turnedOn = 9
输出:[]
方法一:暴力循环
思路:对小时和分钟进行暴力循环,然后把二进制转换即可。
# 暴力循环
# 对小时和分钟进行暴力循环,然后把二进制转换即可。
class Solution:
def readBinaryWatch(self, turnedOn: int) -> List[str]:
ans = list()
for h in range(12):
for m in range(60):
if bin(h).count("1") + bin(m).count("1") == turnedOn:
(f"{h}:{m:02d}")
return ans
方法二:二进制枚举
思路:用位运算取出高 4 位和低 6 位的数,然后转换即可。
# 二进制枚举
# 用位运算取出高 4 位和低 6 位的数,然后转换即可。
class Solution:
def readBinaryWatch(self, turnedOn: int) -> List[str]:
ans = list()
for i in range(1024):
h, m = i >> 6, i & 0x3f # 用位运算取出高 4 位和低 6 位
if h < 12 and m < 60 and bin(i).count("1") == turnedOn:
(f"{h}:{m:02d}")
return ans
总结
这题不错,但这表肯定没人买!