leetcode172.阶乘后的零

249 阅读1分钟

172.阶乘后的零

给定一个整数 n,返回 n! 结果尾数中零的数量。时间复杂度O(log n) 。

输入: 3					        输入: 5
输出: 0							输出: 1
解释: 3! = 6, 尾数中没有零。			解释: 5! = 120, 尾数中有 1 个零.
class Solution:  # 计数5的个数
    def trailingZeroes(self, n: int) -> int:
        ans = 0
        while n >= 5:
            n = n // 5
            ans += n
        return ans
"""
因为偶数 * 5 结果会产生一个 0,
所以阶乘结果末尾 0 的个数,取决于相乘数列中偶数与 5 的个数。
因为是递加一的阶乘,所以偶数的个数一定大于等于 5 的个数,
所以阶乘结果尾数中零的数量取决于数列中包含 5 的个数。
从 1 到 n,每5个数会包含一个 5,每25个数,会包含两个 5,每125个数,会包含 3 个 5...。
所以 n 个数中,包含 5 的个数为 
ans = n!后缀0的个数 = n!质因子中5的个数
    = n//5 + n//25 + n//125 + ....
"""

img