Me(AC 33 / 44 个通过测试用例)
func preimageSizeFZF(K int) int {count := 0for 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 = 0func 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
}
执行结果: 超出内存限制