[leetcode: Python]401. Binary Watch
2017-05-16 17:13
441 查看
Title:
A binary watch has 4 LEDs on the top which represent the hours (0-11), and the 6 LEDs on the bottom represent the minutes (0-59).
Each LED represents a zero or one, with the least significant bit on the right.
![](https://img-blog.csdn.net/20170516171006865?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvTlhIWUQ=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
For example, the above binary watch reads “3:25”.
Given a non-negative integer n which represents the number of LEDs that are currently on, return all possible times the watch could represent.
Example:
Note:
The order of output does not matter.
The hour must not contain a leading zero, for example “01:00” is not
valid, it should be “1:00”.
The minute must be consist of two digits and may contain a leading
zero, for example “10:2” is not valid, it should be “10:02”.
方法一:性能45ms
枚举小时h和分钟m,然后判断二进制1的个数是否等于num
方法二:35ms
A binary watch has 4 LEDs on the top which represent the hours (0-11), and the 6 LEDs on the bottom represent the minutes (0-59).
Each LED represents a zero or one, with the least significant bit on the right.
For example, the above binary watch reads “3:25”.
Given a non-negative integer n which represents the number of LEDs that are currently on, return all possible times the watch could represent.
Example:
Input: n = 1 Return: ["1:00", "2:00", "4:00", "8:00", "0:01", "0:02", "0:04", "0:08", "0:16", "0:32"]
Note:
The order of output does not matter.
The hour must not contain a leading zero, for example “01:00” is not
valid, it should be “1:00”.
The minute must be consist of two digits and may contain a leading
zero, for example “10:2” is not valid, it should be “10:02”.
方法一:性能45ms
枚举小时h和分钟m,然后判断二进制1的个数是否等于num
class Solution(object): def readBinaryWatch(self, num): """ :type num: int :rtype: List[str] """ res = [] for h in range(12): for m in range(60): if (bin(h)+bin(m)).count('1') == num: res.append('%d:%02d' % (h, m)) return res
方法二:35ms
class Solution(object): def readBinaryWatch(self, num): """ :type num: int :rtype: List[str] """ # hh_summary, mm_summary = self.get_summary() hh_summary = { 0: [0], 1: [1, 2, 4, 8], 2: [3, 5, 6, 9, 10], 3: [7, 11], } mm_summary = { 0: [0], 1: [1, 2, 4, 8, 16, 32], 2: [3, 5, 6, 9, 10, 12, 17, 18, 20, 24, 33, 34, 36, 40, 48], 3: [7, 11, 13, 14, 19, 21, 22, 25, 26, 28, 35, 37, 38, 41, 42, 44, 49, 50, 52, 56], 4: [15, 23, 27, 29, 30, 39, 43, 45, 46, 51, 53, 54, 57, 58], 5: [31, 47, 55, 59], } valid_time = [] for hh in range(num + 1): mm = num - hh valid_hh = hh_summary.get(hh, []) valid_mm = mm_summary.get(mm, []) for h in valid_hh: for m in valid_mm: valid_time.append('{0}:{1:02d}'.format(h, m)) return valid_time # def get_summary(self): # hh_summary = self._get_summary(11) # mm_summary = self._get_summary(59) # return hh_summary, mm_summary # def _get_summary(self, num): # summary = {} # for n in range(num + 1): # bit = self.get_bit(n) # summary[bit] = summary.get(bit, []) + # return summary # def get_bit(self, n): # bit = 0 # while n > 0: # bit += n & 1 # n >>= 1 # return bit
相关文章推荐
- leetcode 401. Binary Watch
- 【Leetcode】401. Binary Watch
- LeetCode 401. Binary Watch
- LeetCode-Backtracking-401. Binary Watch
- [LeetCode]401. Binary Watch
- Leetcode-401. Binary Watch
- Leetcode: 401. Binary Watch
- 位操作-leetcode 401. Binary Watch
- [leetcode]: 401. Binary Watch
- 【LeetCode】401. Binary Watch
- LeetCode-401. Binary Watch
- Leetcode 401. Binary Watch
- leetCode 401. Binary Watch
- [LeetCode]401. Binary Watch &bitset的用法&to_string
- [leetcode]Binary Tree Zigzag Level Order Traversal @ Python
- Leetcode_max-points-on-a-line(c++ and python version)
- leetcode 1. Two Sum python
- leetcode 136 python
- leetcode 【 Majority Element 】python 实现
- leetcode 371 python