Me(AC 33 / 44 个通过测试用例)
func preimageSizeFZF(K int) int {
count := 0
for i := 0; i < 1000000; i++ {
if trailingZeroes(i) == K {
count++
}
}
fmt.Println(count)
//fmt.Println(trailingZeroes(25))
return count
}
func trailingZeroes(n int) int {
if n == 0 {
return 0
}
return trailingZeroes(n / 5) + n / 5
}
强行通过后
这个题答案是使用二分查找减少时间。1136ms已经是非常少见的,而且击败了100%的用户。
执行用时 :1136 ms, 在所有 Go 提交中击败了100.00%的用户
内存消耗 :1.9 MB, 在所有 Go 提交中击败了50.00%的用户
使用并发大法(本地通过)
var count int = 0
func preimageSizeFZF(K int) int {
wg := sync.WaitGroup{}
wg.Add(1000000)
for i := 0; i < 1000000; i++ {
go func(i int) {
trailingZeroes(i, K)
wg.Done()
}(i)
}
return count
}
func trailingZeroes(i int, K int) {
if trailingZeroes1(i) == K {
count++
}
}
func trailingZeroes1(n int) int {
if n == 0 {
return 0
}
return trailingZeroes1(n / 5) + n / 5
}
执行结果: 超出内存限制