Leetcode172 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!結果的尾隨零的個數


分析

直觀的思路是:先求出階乘結果n!,然後循環計算出n!%10 得到尾隨0的個數,這樣的做法容易出現超出數據類型範圍的情況。現在換一種思路,求階乘結果的尾隨0數m,即階乘結果是10^m的倍數,而10 = 5 * 2,而n! = n * (n-1)*...*2*1,那麼只需要求出,將1到n這n個數分別分解成質數因子的乘積中,所有因數5的個數或因數2的個數的最小值,由於2的個數一定比5的個數多,所以只需要求出在這n個數的質因子中5的總個數count。

假設n= 627,在1.....627中,只要隔5個數就會得到一個5的倍數,627/5 = 125 就可以得到:這627個數字中有125個數分別可以分解出一個質因子5,但是這依然沒有完成我們的要求,因爲在第一次求出count=125的基礎上,在25,50,75,100等這些數字裏還可以再分解出質因子5,而125,250等數字裏還可以分別分解出2個質因子5,625中還可以分解出3個質因子,那麼還需要將這些質因子的個數加在count上,那麼就需要計算n個數中,多少個25的倍數;n個書中,多少個125的倍數......。最終count的計算公式爲count = n/5 + n/25+n/125 +n/(5^4)+....直到n/(5^x) == 0爲止。


java代碼實現

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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章