[LeetCode]401. 二进制手表 ★

mac2022-06-30  27

每天一道编程题

题目描述样例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

题后反思:

文中都是我个人的理解,如有错误的地方欢迎下方评论告诉我,我及时更正,大家共同进步

最新回复(0)