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 + ....
"""