0
点赞
收藏
分享

微信扫一扫

JAVA练习228-阶乘后的零

小沙坨 2022-03-25 阅读 82

题目概述

给定一个整数 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 <= 10^4
     

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

题目来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/factorial-trailing-zeroes

解题分析:

方法:数学

求尾随零的数量,就相当于求能组合成 10 的组合的数量,能组合成 10 的组合只有 5 的倍数和 2 的倍数,而 2 的倍数一定比 5 的倍数多,所以我们只需要求 5 的倍数个数就能得到 10 的组合个数,而 5 的倍数个数直接用 n / 5 就可以得到。值得注意的是,像 25,125 这种情况,相当于有多个 5 存在,我们需要再对这些情况进行计算。

时间复杂度:O(log n)
空间复杂度:O(1)

class Solution {
    public int trailingZeroes(int n) {
        //记录结果
        int res = 0;
        //遍历
        for(int i = 5; i <= n; i *= 5){
            res += n / i;
        }
        return res;
    }
}
举报

相关推荐

0 条评论