美文网首页leetCode
【数学】leetcode 阶乘后的零

【数学】leetcode 阶乘后的零

作者: 修行者12138 | 来源:发表于2020-09-05 22:21 被阅读0次

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

    示例 1:

    输入: 3
    输出: 0
    解释: 3! = 6, 尾数中没有零。
    示例 2:

    输入: 5
    输出: 1
    解释: 5! = 120, 尾数中有 1 个零.
    说明: 你算法的时间复杂度应为 O(log n) 。

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



    AC代码

    class Solution {
        /**
         * 思路
         * 任意两个数相乘,都可以转化为质数相乘的形式,比如4*6=(2^3)*3,n!也一样可以转化为质数相乘的形式
         * 质数中,只有2*5会产生0,而2的数量一定比5多(每5个数有两个2,一个5),所以本题的结果,其实就是n!中含因子5的数量
         * 设最终结果为result
         * 假设1到n中,共有k1个5^1的倍数,5^1至少含1个因子5,result += k1
         * 假设1到n中,共有k2个5^2的倍数,5^2至少含2个因子5,但是其中1个上一步已经算过了,所以新增的因子5的数量只有k2,result += k2
         * 假设1到n中,共有k3个5^3的倍数,5^3至少含3个因子5,但是其中2个上一步已经算过了,所以新增的因子5的数量只有k3,result += k3
         * 依此类推
         * @param n
         * @return
         */
        public int trailingZeroes(int n) {
            int result = 0;
            // multiple是5的倍数
            for (long multiple = 5; multiple <= n; multiple *= 5) {
                result += n / multiple;
            }
            return result;
        }
    }
    
    image.png

    相关文章

      网友评论

        本文标题:【数学】leetcode 阶乘后的零

        本文链接:https://www.haomeiwen.com/subject/raehektx.html