《leetCode》:Factorial Trailing Zeroes

题目

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

Note: Your solution should be in logarithmic time complexity.

思路一:不能AC

思路,统计2和5的个数 ,时间复杂度为O(n)


int min(int a,int b){
    return a<b?a:b;
}
int trailingZeroes(int n) {
    if(n<=0){
        return 0;
    } 
    int twoCount=0;
    int fiveCount=0;
    for(int i=1;i<=n;i++){
        if(i&0x01==0){
            twoCount++;
        }
        if(i%5==0){
            fiveCount++;
        }
    }
    return min(fiveCount,twoCount);
}

思路二

按照上面的统计,报超时,继续分析可知,n!中能被2整除的个数一定大于整除5的个数,因此,只需要统计n!=(2^x)(3^y)(5^z)….中z的值即可。

int trailingZeroes(int n) {
    int zerosCount=0;
    //统计 n整数5/25/125/625等的个数 
    while(n>=5){
        zerosCount+=n/5;
        n=n/5; 
    } 
    return zerosCount; 
}

你可能感兴趣的:(LeetCode,zeros,trailing)