[LeetCode]401. 二进制手表 ★

题目描述

二进制手表顶部有 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

题后反思:

  1. 采用深搜来做,总共有10个位置,每个位置可以为0也可以为1,当step为10时,判断self.digit列表中1的个数和题目要求中的是否一致,当一致的时候,判断小时和分钟的表示数字是否超出范围,没有超出范围的时候,将其转换成时间格式存放在self.returnList中。

C语言解法


执行用时 : ms
内存消耗 : MB

题后反思:

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值