mirror of
https://github.com/halfrost/LeetCode-Go.git
synced 2025-07-07 01:44:56 +08:00
Update 0401
This commit is contained in:
@ -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
|
|
||||||
}
|
|
||||||
|
@ -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) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user