0
点赞
收藏
分享

微信扫一扫

LeetCode_数学_中等_172.阶乘后的零

芷兮离离 2022-01-08 阅读 35

目录

1.题目

给定一个整数 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
进阶:你可以设计并实现对数时间复杂度的算法来解决此问题吗?

2.思路

(1)思路1
① 两个数相乘结果末尾有 0,这说明这两个数中有因子 2 和 5,即问题可以转化为:n! 最多可以分解出多少对因子 2 和 5?
② 再进一步分析,由于每个偶数都能分解出因子 2,因子 2 肯定比因子 5 多,所以分解的因子对数主要取决于能分解出几个因子 5
③ 最后就问题转化为:n! 最多可以分解出多少个因子5? 求解的难点在于对于50,75这样的数,它们可以分解出多个因子 5,因此关键在于不能漏算。因此我们可以依次计算小于等于 n 的整数中可以分解出1、2、3…i 个5的整数个数,当 5i>n 结束计算,最后将其相加即可

3.代码实现(Java)

//思路1
public int trailingZeroes(int n) {
    int res = 0;
    //factor=5^i^,初始时i=1
    int factor = 5;
    while(factor<=n){
        res+=n/factor;
        //此处可以看作i++
        factor*=5;
    }
    return res;
}
举报

相关推荐

0 条评论