172 Factorial Trailing Zeroes 阶乘后的零

给定一个整数 n,返回 n! 结果尾数中零的数量。
注意: 你的解决方案应为对数时间复杂度。

详见:https://leetcode.com/problems/factorial-trailing-zeroes/description/

Java实现:

N的阶乘可以分解为: 2的X次方,3的Y次方,4的K次方,5次Z方,.....的乘积。由于10 = 2 * 5,所以M只能和X和Z有关,每一对2和5相乘就可以得到一个10,于是M = MIN(X,Z),不难看出X大于Z,因为被2整除的频率比被5整除的频率高的多。所以可以把公式简化为M=Z。

方法一:

class Solution {
    public int trailingZeroes(int n) {
        int res=0;
        while(n!=0){
            n/=5;
            res+=n;
        }
        return res;
    }
}

方法二:超时

class Solution {
    public int trailingZeroes(int n) {
        int res=0;
        for(int i=5;i<=n;++i){
            int m=i;
            while(m%5==0){
                ++res;
                m/=5;
            }
        }
        return res;
    }
}

参考:https://www.cnblogs.com/grandyang/p/4219878.html

posted on 2018-04-07 14:37  lina2014  阅读(159)  评论(0编辑  收藏  举报

导航