leetcode题解172-阶乘后的零
发布日期:2025-04-05 05:15:59 浏览次数:7 分类:精选文章

本文共 630 字,大约阅读时间需要 2 分钟。

如何计算整数n的阶乘末尾零的数量

计算整数n的阶乘末尾零的数量可以通过分析阶乘中因数5的数量来实现。每对因数2和5会生成一个末尾的零,而因为阶乘中的因数2总是比因数5多,因此可以通过计算因数5的数量来确定末尾零的多少。

步骤如下:

  • 初始化一个计数器count为0
  • 初始化一个变量divisor为5
  • 进入一个循环,当divisor小于等于n时: a. 计算n除以divisor的结果并取整数部分,得到一个数 b. 将这个数加到count上 c. 将divisor乘以5,进入下一个循环
  • 循环结束后,返回count的值
  • 代码实现:

    function trailingZeroes($n) {
    $count = 0;
    $divisor = 5;
    while ($divisor <= $n) {
    $temp = intval($n / $divisor);
    $count += $temp;
    $divisor *= 5;
    }
    return $count;
    }

    例如,输入为5时,步骤如下:

    • 计算5 /5 =1,加到count得到1。
    • 然后divisor变为25,25≤5不成立,退出循环。
    • 返回count=1。

    再看n=3:

    • 3/5=0,所以count=0,循环后divisor=5,依旧为5>3不成立。
    • 返回count=0。

    这样的方法时间复杂度为O(log n),非常高效。

    上一篇:leetcode题解173-二叉搜索树迭代器
    下一篇:leetcode题解167-两数之和 II - 输入有序数组

    发表评论

    最新留言

    很好
    [***.229.124.182]2025年05月06日 13时54分18秒