目录

LC 172. 阶乘后的零 (opens new window) (opens new window)

中等

# 问题描述

给定一个整数 n ,返回 n! 结果中尾随零的数量。

提示 n! = n * (n - 1) * (n - 2) * ... * 3 * 2 * 1

示例 1:

输入:n = 3
输出:0
解释:3! = 6 ,不含尾随 0

示例 2:

输入:n = 5
输出:1
解释:5! = 120 ,有一个尾随 0

示例 3:

输入:n = 0
输出:0

提示:

  • 0 <= n <= 104

进阶:你可以设计并实现对数时间复杂度的算法来解决此问题吗?

# 数学

对于任意一个 n!n! 而言,其尾随零的个数取决于展开式中 1010 的个数,而 1010 可由质因数 2×52 \times 5而来,因此 n!n! 的尾随零个数为展开式中各项分解质因数后 22 的数量55 的数量 中的较小值,而 55 的数量显然比 22 的数量少,因为问题就转化为统计分解质因数后 55 的个数。

/**
 * @param {number} n
 * @return {number}
 */
var trailingZeroes = function (n) {
  let ans = 0
  while (n !== 0) {
    n = ~~(n / 5)
    ans += n
  }
  return ans
}
  • 时间复杂度:O(logn)O(log \, n)
  • 空间复杂度:O(1)O(1)
上次更新: 2023/01/31 19:48:05

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 , 转载请注明出处!