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;
}
}