題目:git
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.app
For example, the above binary watch reads "3:25".spa
Given a non-negative integer n which represents the number of LEDs that are currently on, return all possible times the watch could represent.code
Example:orm
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:blog
連接:https://leetcode.com/problems/binary-watch/#/descriptionip
3/22/2017leetcode
已經不會作題了,看來仍是得好好學算法get
抄別人的算法,優勢是好簡單啊,缺點是我仍是不會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