题目:
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".
链接:https://leetcode.com/problems/binary-watch/#/description
3/22/2017
已经不会做题了,看来还是得好好学算法
抄别人的算法,优点是好简单啊,缺点是我还是不会backtracking...
注意Integer.bitCount()这个function很有用啊
1 public List<String> readBinaryWatch(int num) { 2 List<String> times = new ArrayList<>(); 3 for (int h=0; h<12; h++) 4 for (int m=0; m<60; m++) 5 if (Integer.bitCount(h * 64 + m) == num) 6 times.add(String.format("%d:%02d", h, m)); 7 return times; 8 }
别人的dfs做法:因为我不会
1 class Solution(object): 2 def readBinaryWatch(self, n): 3 4 def dfs(n, hours, mins, idx): 5 if hours >= 12 or mins > 59: return 6 if not n: 7 res.append(str(hours) + ":" + "0" * (mins < 10) + str(mins)) 8 return 9 for i in range(idx, 10): 10 if i < 4: 11 dfs(n - 1, hours | (1 << i), mins, i + 1) 12 else: 13 k = i - 4 14 dfs(n - 1, hours, mins | (1 << k), i + 1) 15 16 res = [] 17 dfs(n, 0, 0, 0) 18 return res
其他算法链接:https://discuss.leetcode.com/category/526/binary-watch