401. 二进制手表

Posted ustc-zcc

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了401. 二进制手表相关的知识,希望对你有一定的参考价值。

二进制手表顶部有 4 个 LED 代表小时(0-11),底部的 6 个 LED 代表分钟(0-59)。每个 LED 代表一个 0 或 1,最低位在右侧。

 技术图片

例如,上面的二进制手表读取 “3:25”。

给定一个非负整数 n 代表当前 LED 亮着的数量,返回所有可能的时间。

案例:

输入: n = 1
返回: ["1:00", "2:00", "4:00", "8:00", "0:01", "0:02", "0:04", "0:08", "0:16", "0:32"]

class Solution:
    def readBinaryWatch(self, num: int) -> List[str]:
        hour = [1, 2, 4, 8]
        minute = [1, 2, 4, 8, 16, 32]
        result = []
        def backtrack(path, h, m, n): #回溯法
            # 结束条件
            if len(path) == n:
                if h < 12 and m < 60:
                    if m < 10:
                        times = str(h) + ‘:0‘ + str(m)
                    else:
                        times = str(h) + ‘:‘ + str(m)
                    result.append(times)
                return
            for i in range(len(hour)+len(minute)):
                if i not in path:
                    if 0 <= i <= 3:
                        h += hour[i]
                        temp = hour[i]
                    elif 4 <= i <= 9:
                        m += minute[i-4]
                        temp = minute[i-4]
                    path.append(i)
                    backtrack(path, h, m, n)
                    path.pop()
                    if 0 <= i <= 3:
                        h -= temp
                    elif 4 <= i <= 9:
                        m -= temp
        backtrack([], 0, 0, num)
        return list(set(result))

  

以上是关于401. 二进制手表的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode 401. Binary Watch(二进制手表)

401. 二进制手表

401. 二进制手表

[M模拟] lc401. 二进制手表(模拟+位运算技巧+sprintf()技巧+二进制枚举)

401. 二进制手表

LeetCode 401 二进制手表[枚举法] HERODING的LeetCode之路