尾部的零
描述
設計一個算法,計算出n階乘中尾部零的個數
您在真實的面試中是否遇到過這個題? 是
題目糾錯
樣例
11! = 39916800,因此應該返回 2
挑戰
O(logN)的時間複雜度
之前這個題目..emm...我按照我的第一想法寫的, (求出階乘, 再看有多少零)
但是測試數據裏竟然用105!這種瘋狂的數字=.=
然後果不其然, 程序爆了, 然後靈光一現...下面說一下思路:)
既然他讓求多少個零, 那麼, 在什麼情況下能夠得到 0 呢?
當然, 出現 5 的倍數的情況下, 不就會出現一個 0 嗎? (5 x 2 = 10)
那麼出現 5^2 的時候, 將會出現 00 的情況 (25 x 4 = 100)
以此類推.
那麼.....我們就得到我們想要的答案了
public class Solution {
/*
* @param n: An integer
* @return: An integer, denote the number of trailing zeros in n!
*/
public long trailingZeros(long n) {
/**
* 發現這道題可以巧算!
* 計算0的個數,那我我們只需要知道在階乘的時候
* 有多少5 相加就是最後的結果(=.=)
* */
long num_five = n / 5;
long count = 0;
while (num_five > 0){
count += num_five;
num_five /= 5;
}
return count;
}
}