[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

題後反思:

文中都是我個人的理解,如有錯誤的地方歡迎下方評論告訴我,我及時更正,大家共同進步

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章