Factorial Trailing Zeroes

题目描述:

Given an integer n, return the number of trailing zeroes in n!.

Note: Your solution should be in logarithmic time complexity.

题目很清楚,就是给定N,求N!的末尾有多少0。

对n!做质因数分解n!=2x*3y*5z*...

显然0的个数等于min(x,z),并且min(x,z)==z


又z均由1-N中5的倍数所提供,如果该数仅为5的倍数则贡献1,若为25的倍数则贡献2.

而1-N中,5的倍数个数为|_N/5_|,|_ _|表示取下整数。

又1-N中,25的倍数个数为|_N/25_|.需要注意到的是|_N/5_|已经包含了|_N/25_|。又25的倍数贡献了2,所以考虑到避免重复计算,则N!的素数分解中5的指数z为:

z = |_N/5_|+|_N/25_|+|_N/5^3_|+...


代码如下:

public class Solution {
    public int trailingZeroes(int n) {   
        if(n<1) return 0;   
        int c = 0;   
        while(n/5 != 0) {    
            n /= 5;   
            c += n;   
        }
        return c;   
    }   
}




你可能感兴趣的:(java,LeetCode,Math)