Update 0401

This commit is contained in:
YDZ
2021-05-02 11:38:13 +08:00
parent dd99c2c7e1
commit 9c0603ea84
2 changed files with 88 additions and 48 deletions

View File

@ -5,6 +5,43 @@ import (
"strconv" "strconv"
) )
// 解法一
func readBinaryWatch(num int) []string {
memo := make([]int, 60)
// count the number of 1 in a binary number
count := func(n int) int {
if memo[n] != 0 {
return memo[n]
}
originN, res := n, 0
for n != 0 {
n = n & (n - 1)
res++
}
memo[originN] = res
return res
}
// fmtMinute format minute 0:1 -> 0:01
fmtMinute := func(m int) string {
if m < 10 {
return "0" + strconv.Itoa(m)
}
return strconv.Itoa(m)
}
var res []string
// traverse 0:00 -> 12:00
for i := 0; i < 12; i++ {
for j := 0; j < 60; j++ {
if count(i)+count(j) == num {
res = append(res, strconv.Itoa(i)+":"+fmtMinute(j))
}
}
}
return res
}
// 解法二 打表
var ( var (
hour = []string{"1", "2", "4", "8"} hour = []string{"1", "2", "4", "8"}
minute = []string{"01", "02", "04", "08", "16", "32"} minute = []string{"01", "02", "04", "08", "16", "32"}
@ -88,38 +125,3 @@ func findReadBinaryWatchHour(target, index int, c []int, res *[]string) {
c = c[:len(c)-1] c = c[:len(c)-1]
} }
} }
func readBinaryWatch(num int) []string {
memo := make([]int, 60)
// count the number of 1 in a binary number
count := func(n int) int {
if memo[n] != 0 {
return memo[n]
}
originN, res := n, 0
for n != 0 {
n = n & (n - 1)
res++
}
memo[originN] = res
return res
}
// fmtMinute format minute 0:1 -> 0:01
fmtMinute := func(m int) string {
if m < 10 {
return "0" + strconv.Itoa(m)
}
return strconv.Itoa(m)
}
var res []string
// traverse 0:00 -> 12:00
for i := 0; i < 12; i++ {
for j := 0; j < 60; j++ {
if count(i)+count(j) == num {
res = append(res, strconv.Itoa(i)+":"+fmtMinute(j))
}
}
}
return res
}

View File

@ -51,30 +51,67 @@ import (
"strconv" "strconv"
) )
// 解法一
func readBinaryWatch(num int) []string {
memo := make([]int, 60)
// count the number of 1 in a binary number
count := func(n int) int {
if memo[n] != 0 {
return memo[n]
}
originN, res := n, 0
for n != 0 {
n = n & (n - 1)
res++
}
memo[originN] = res
return res
}
// fmtMinute format minute 0:1 -> 0:01
fmtMinute := func(m int) string {
if m < 10 {
return "0" + strconv.Itoa(m)
}
return strconv.Itoa(m)
}
var res []string
// traverse 0:00 -> 12:00
for i := 0; i < 12; i++ {
for j := 0; j < 60; j++ {
if count(i)+count(j) == num {
res = append(res, strconv.Itoa(i)+":"+fmtMinute(j))
}
}
}
return res
}
// 解法二 打表
var ( var (
hour = []string{"1", "2", "4", "8"} hour = []string{"1", "2", "4", "8"}
minute = []string{"01", "02", "04", "08", "16", "32"} minute = []string{"01", "02", "04", "08", "16", "32"}
hourMap = map[int][]string{ hourMap = map[int][]string{
0: []string{"0"}, 0: {"0"},
1: []string{"1", "2", "4", "8"}, 1: {"1", "2", "4", "8"},
2: []string{"3", "5", "9", "6", "10"}, 2: {"3", "5", "9", "6", "10"},
3: []string{"7", "11"}, 3: {"7", "11"},
} }
minuteMap = map[int][]string{ minuteMap = map[int][]string{
0: []string{"00"}, 0: {"00"},
1: []string{"01", "02", "04", "08", "16", "32"}, 1: {"01", "02", "04", "08", "16", "32"},
2: []string{"03", "05", "09", "17", "33", "06", "10", "18", "34", "12", "20", "36", "24", "40", "48"}, 2: {"03", "05", "09", "17", "33", "06", "10", "18", "34", "12", "20", "36", "24", "40", "48"},
3: []string{"07", "11", "19", "35", "13", "21", "37", "25", "41", "49", "14", "22", "38", "26", "42", "50", "28", "44", "52", "56"}, 3: {"07", "11", "19", "35", "13", "21", "37", "25", "41", "49", "14", "22", "38", "26", "42", "50", "28", "44", "52", "56"},
4: []string{"15", "23", "39", "27", "43", "51", "29", "45", "53", "57", "30", "46", "54", "58"}, 4: {"15", "23", "39", "27", "43", "51", "29", "45", "53", "57", "30", "46", "54", "58"},
5: []string{"31", "47", "55", "59"}, 5: {"31", "47", "55", "59"},
} }
) )
func readBinaryWatch(num int) []string { func readBinaryWatch1(num int) []string {
var res []string
if num > 8 { if num > 8 {
return []string{} return res
} }
res := []string{}
for i := 0; i <= num; i++ { for i := 0; i <= num; i++ {
for j := 0; j < len(hourMap[i]); j++ { for j := 0; j < len(hourMap[i]); j++ {
for k := 0; k < len(minuteMap[num-i]); k++ { for k := 0; k < len(minuteMap[num-i]); k++ {
@ -135,6 +172,7 @@ func findReadBinaryWatchHour(target, index int, c []int, res *[]string) {
} }
} }
``` ```