Factorial Trailing Zeroes

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

Note: Your solution should be in logarithmic time complexity.

迭代法

复杂度

时间 O(logN) 空间 O(k^2)

思路

技巧在于,每5个数会产生一个0。为什么呢?试想1*2*3*4*5*6*7*8*9*10*11,前5个数中有一个2一个5,相乘有一个0,后5个数中有一个10,又有一个0。以此类推,每5个数会有一个0。

代码

public class Solution {
    public int trailingZeroes(int n) {
        int sum = 0;
        while(n > 0){
            // 阶乘中有多少5,结果就有多少个0
            sum += n / 5;
            n /= 5;
        }
        return sum;
    }
}

ethannnli
858 声望360 粉丝