Trailing Zeros

題意:給予一個數 $$n$$ ,求 $$n!$$ 有多少個零。

解題思路:會構成 $$0$$ 只有兩個 factor,5 與 2,由於 2 的個數一定比 5 多,因此只需要求有幾個5就好了,但是不能直接只除以5,5 的倍數 25,125,625…皆要考慮進去。

原本使用以下解法會出現超時的錯誤

public long trailingZeros(long n) {
    long count = 0;
    for (int i = 5; i <= n; i = i * 5) {
        count += n / i;
    }
    return count;
}

因此改用遞迴的方式實作,程式碼如下:

public long trailingZeros(long n) {

    if (n < 5) {
        return 0;
    }

    return n / 5 + trailingZeros(n / 5);
}

results matching ""

    No results matching ""