目录

0793:阶乘函数后 K 个零(2100 分)

力扣第 793 题

题目

f(x)x! 末尾是 0 的数量。回想一下 x! = 1 * 2 * 3 * ... * x,且 0! = 1

  • 例如, f(3) = 0 ,因为 3! = 6 的末尾没有 0 ;而 f(11) = 2 ,因为 11!= 39916800 末端有 2 个 0 。

给定 k,找出返回能满足 f(x) = k 的非负整数 x 的数量。

示例 1:

输入:k = 0
输出:5
解释:0!, 1!, 2!, 3!, 和 4! 均符合 k = 0 的条件。

示例 2:

输入:k = 5
输出:0
解释:没有匹配到这样的 x!,符合 k = 5 的条件。

示例 3:

输入: k = 3
输出: 5

提示:

  • 0 <= k <= 109

相似问题:

分析

  • 显然 f(x) 递增,二分查找第一个满足 f(x)>=k+1 和第一个满足 f(x)>=k 的数,相减即可
  • 计算 f(x) 即是 0172

解答

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
class Solution:
    def preimageSizeFZF(self, k: int) -> int:
        def cal(x):
            res = 0
            while x:
                x //=5
                res += x
            return res
        
        def f(k):
            return bisect_left(range(5*k),k,key=cal)

        return f(k+1)-f(k)

4 ms