題目描述
二進制手錶頂部有 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:%02d'%(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
題後反思:
文中都是我個人的理解,如有錯誤的地方歡迎下方評論告訴我,我及時更正,大家共同進步