lc-go/solutions/4/q401/solution.go
2026-02-17 14:25:55 +09:00

45 lines
848 B
Go

package q401
import "fmt"
func bin2time(leds []uint8) (string, bool) {
hour := leds[0]<<3 + leds[1]<<2 + leds[2]<<1 + leds[3]
minute := leds[4]<<5 +
leds[5]<<4 +
leds[6]<<3 +
leds[7]<<2 +
leds[8]<<1 +
leds[9]
if hour >= 12 || minute >= 60 {
return "", false
}
return fmt.Sprintf("%d:%02d", hour, minute), true
}
func iterate(remaining, offset int, leds []uint8, ret *[]string) {
if 10-offset < remaining {
return
}
if remaining == 0 {
if r, ok := bin2time(leds); ok {
*ret = append(*ret, r)
}
return
}
leds[offset] = 1
iterate(remaining-1, offset+1, leds, ret)
leds[offset] = 0
iterate(remaining, offset+1, leds, ret)
}
func readBinaryWatch(turnedOn int) []string {
if turnedOn >= 9 {
return nil
}
ret := []string{}
iterate(turnedOn, 0, make([]uint8, 10), &ret)
return ret
}
var _ = readBinaryWatch