【天天一題】LeetCode 172. 階乘後的零


開源地址:點擊該連接


題目描述

https://leetcode-cn.com/problems/factorial-trailing-zeroes
給定一個整數 n,返回 n! 結果尾數中零的數量。

示例 1:
    輸入: 3
    輸出: 0
    解釋: 3! = 6, 尾數中沒有零。

示例 2:
    輸入: 5
    輸出: 1
    解釋: 5! = 120, 尾數中有 1 個零.

說明: 
    你算法的時間複雜度應爲O(logn)。

解題思路

最直接的解法就是先求出 n! 等於多少
而後計算尾數中零的數量,該方法的複雜度爲 O(n)
若是想實現複雜度爲 O(logn)
必須另想方法,既然咱們要計算尾數中的零的個數
等價於咱們要計算 n! 中含有多少個 10 這個因子
再進一步的說,10 = 2 * 5,這兩個因子已沒法再分解了
原問題再次等價於計算 n! 中含有多少對 (2, 5) 因子
很顯然,在 n! = 1*2*3*4*5*6*...*(n-1)*n 中
2 這個因子出現的次數確定 >= 5 出現的次數
故原問題又等價於計算 n! 中因子 5 出現的次數
而全部可能出如今含有 5 的數以下:
5^1, 5^2, 5^3, 5^4, 5^5..., 5^max_exp
因此該題的解就是計算以下結果:
(n/5^1 + n/5^2 + n/5^3 + n/5^4 + n/5^5 + ... + n/5^max_exp)

示例代碼

class Solution {
public:
    int trailingZeroes(int n) {
        int max_exp = log(n) / log(5);
        int res = 0;
        
        for (int i=0; i<max_exp; i++) {
            int temp = n / 5;
            res += temp;
            n = temp;
        }

        return res;
    }
};
相關文章
相關標籤/搜索