在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ 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 Note:
二进制手表顶部有 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"] 注意事项:
1 class Solution { 2 func readBinaryWatch(_ num: Int) -> [String] { 3 var times:[String] = [String]() 4 //轮询遍历 5 for h in 0..<12 6 { 7 //将常量转换为变量 8 var hour:Int = h 9 for m in 0..<60 10 { 11 //将常量转换为变量 12 var minute:Int = m 13 var number:Int = hour*64 + minute 14 if number.bitCount() == num 15 { 16 //minute不足2位前面补0的写法:%02d 17 var str = String(format: "%d:%02d", arguments:[hour,minute]) 18 times.append(str) 19 } 20 } 21 } 22 return times 23 } 24 } 25 //Int扩展代码 26 extension Int 27 { 28 mutating func bitCount() -> Int 29 { 30 self = self - ((self >> 1) & 0x55555555); 31 self = (self & 0x33333333) + ((self >> 2) & 0x33333333); 32 self = (self + (self >> 4)) & 0x0f0f0f0f; 33 self = self + (self >> 8); 34 self = self + (self >> 16); 35 return self & 0x3f; 36 } 37 } 8ms 1 class Solution { 2 func readBinaryWatch(_ num: Int) -> [String] { 3 4 let leds = [1, 2, 4, 8, 1, 2, 4, 8, 16, 32] 5 var result = [String]() 6 readBinaryWatch(leds, leds.count, 0, (leds.count - num), 0, 0, &result) 7 return result 8 } 9 10 func readBinaryWatch(_ leds: [Int], _ ledsCount: Int, _ left: Int, _ right: Int, _ hours: Int, _ minutes: Int, _ result: inout [String]) { 11 if hours > 11 || minutes > 59 { return } 12 if right >= leds.count { 13 result.append(String(format: "%d:%02d", hours, minutes)) 14 return 15 } 16 17 for index in left...right { 18 var currentHours = hours 19 var currentMinutes = minutes 20 21 let value = leds[index] 22 if index >= 4 { currentMinutes += value } 23 else { currentHours += value } 24 25 readBinaryWatch(leds, ledsCount, index + 1, right + 1, currentHours, currentMinutes, &result) 26 } 27 } 28 29 } 12ms 1 class Solution { 2 let hourArray = [ 3 [0], 4 [1, 2, 4, 8], 5 [3, 5, 6, 9, 10], 6 [7, 11] 7 ] 8 let minArray = [ 9 [0], 10 [1, 2, 4, 8, 16, 32], 11 [3, 5, 6, 9, 10, 12, 17, 18, 20, 24, 33, 34, 36, 40, 48], 12 [7, 11, 13, 14, 19, 21, 22, 25, 26, 28, 35, 37, 38, 41, 42, 44, 49, 50, 52, 56], 13 [15, 23, 27, 29, 30, 39, 43, 45, 46, 51, 53, 54, 57, 58], 14 [31, 47, 55, 59] 15 ] 16 func readBinaryWatch(_ num: Int) -> [String] { 17 var result = [String]() 18 19 for hNum in 0...min(3, num) { 20 let mNum = num - hNum 21 if mNum < minArray.count { 22 for h in hourArray[hNum] { 23 for m in minArray[mNum] { 24 result.append("\(h):\(String(format: "%02d", m))") 25 } 26 } 27 } 28 } 29 return result 30 } 31 } 20ms 1 class Solution { 2 func readBinaryWatch(_ num: Int) -> [String] { 3 var times: [String] = [] 4 let maxClock = num == 1 ? 8 : 11 5 let maxMinute = num == 1 ? 32 : 59 6 for clock in 0...maxClock { 7 for minute in 0...maxMinute { 8 if bitCount(clock) + bitCount(minute) == num { 9 let time = String(format: "%d:%02d", clock, minute) 10 times.append(time) 11 } 12 } 13 } 14 15 return times 16 } 17 18 func bitCount(_ num: Int) -> Int { 19 var result = 0 20 var num2 = num 21 while num2 > 0 { 22 result += num2 & 1 23 num2 >>= 1 24 } 25 26 return result 27 } 28 } 28ms 1 class Solution { 2 func readBinaryWatch(_ num: Int) -> [String] { 3 var res = [String]() 4 5 func bitCount(_ num: Int) -> Int { 6 var count = 0 7 var num = num 8 while num > 0 { 9 count += num & 1 10 num >>= 1 11 } 12 return count 13 } 14 15 for h in 0...11 { 16 for m in 0...59 { 17 if bitCount(h) + bitCount(m) == num { 18 res.append(String(format: "%d:%02d", h, m)) 19 } 20 } 21 } 22 23 return res 24 } 25 } 48ms 1 class Solution { 2 func readBinaryWatch(_ num: Int) -> [String] { 3 var ret: [String] = [] 4 5 for i in 0...11 { 6 for j in 0...59 { 7 let hourBinary = String(i, radix: 2).filter { $0 == "1" } 8 let minuteBinary = String(j, radix: 2).filter { $0 == "1" } 9 10 if hourBinary.count + minuteBinary.count == num { 11 ret.append(String(format: "%d:%02d", i, j)) 12 } 13 } 14 } 15 16 return ret 17 } 18 } 48ms 1 class Solution { 2 func readBinaryWatch(_ num: Int) -> [String] { 3 var res = [String]() 4 5 func findLEDs(_ h: Int, _ m: Int) -> Int { 6 let hc = Array(String(h, radix: 2)).filter { $0 == "1" }.count 7 let mc = Array(String(m, radix: 2)).filter { $0 == "1" }.count 8 return hc + mc 9 } 10 11 for h in 0...11 { 12 for m in 0...59 { 13 if findLEDs(h, m) == num { 14 res.append(String(format: "%d:%02d", h, m)) 15 } 16 } 17 } 18 19 return res 20 } 21 } 52ms 1 class Solution { 2 func readBinaryWatch(_ num: Int) -> [String] { 3 var result = [String]() 4 5 func findLEDs(_ h: Int, _ m: Int) -> Int { 6 let hc = Array(String(h, radix: 2).characters).filter { $0 == "1" }.count 7 let mc = Array(String(m, radix: 2).characters).filter { $0 == "1" }.count 8 return hc + mc 9 } 10 for h in 0...11 { 11 for m in 0...59 { 12 if findLEDs(h, m) == num { 13 result.append(String(format: "%d:%02d", h, m)) 14 } 15 } 16 } 17 return result 18 } 19 }
|
请发表评论