每天一道编程题
题目描述样例python解法C语言解法
题目描述
二进制手表顶部有 4 个 LED 代表小时(0-11),底部的 6 个 LED 代表分钟(0-59)。
每个 LED 代表一个 0 或 1,最低位在右侧。
样例
输入: n = 1 返回: [“1:00”, “2:00”, “4:00”, “8:00”, “0:01”, “0:02”, “0:04”, “0:08”, “0:16”, “0:32”]
python解法
class Solution:
num
= 0
step
= 10
digit
= [0 for i
in range(10)]
returnList
= []
def number(self
):
return len(list(filter(lambda x
:x
, self
.digit
)))
def isHour(self
):
num
= 0
for i
,v
in enumerate(self
.digit
[0:4]):
num
+= v
* (2**i
)
return num
def isMinute(self
):
num
= 0
for i
,v
in enumerate(self
.digit
[4:]):
num
+= v
* (2**i
)
return num
def dfs(self
, step
):
if step
== self
.step
:
if self
.number
() == self
.num
and self
.isHour
()<12 and self
.isMinute
()<60:
self
.returnList
.append
('%d:d'%(self
.isHour
(), self
.isMinute
()))
else:
self
.digit
[step
] = 0
self
.dfs
(step
+ 1)
self
.digit
[step
] = 1
self
.dfs
(step
+ 1)
def readBinaryWatch(self
, num
: int) -> List
[str]:
self
.num
= num
self
.digit
= [0 for i
in range(10)]
self
.returnList
.clear
()
self
.dfs
(0)
return self
.returnList
执行用时 : 56ms 内存消耗 : 13.8MB
题后反思:
采用深搜来做,总共有10个位置,每个位置可以为0也可以为1,当step为10时,判断self.digit列表中1的个数和题目要求中的是否一致,当一致的时候,判断小时和分钟的表示数字是否超出范围,没有超出范围的时候,将其转换成时间格式存放在self.returnList中。
C语言解法
执行用时 : ms 内存消耗 : MB
题后反思:
文中都是我个人的理解,如有错误的地方欢迎下方评论告诉我,我及时更正,大家共同进步