题目
给定一个整数 n,返回 n! 结果尾数中零的数量。
示例
示例 1:
输入: 3
输出: 0
解释: 3! = 6, 尾数中没有零。
示例 2:
输入: 5
输出: 1
解释: 5! = 120, 尾数中有 1 个零.
说明: 你算法的时间复杂度应为 O(log n) 。
解题
思路
这道题时间复杂度要求是O(log n),因此你先求出来阶乘再看尾部有几个0的方案就宣告破产了,就算不要求时间复杂度,如果阶乘特别大,很容易就爆了。
首先,我们要明白尾数里面有0是怎么来的,末尾有0肯定是乘以10了,而10是2*5来的,而2的数量是一定大于5放入数量,如果这个为题就是,在阶乘的过程中一共出现了多少个5相乘。
首先我们使用n/5,这样就可以获取n后面有多少个5或者5的倍数的相乘因子。但是有些数比如25是2个5相乘,125是3个5相乘,所以我们要把i除以5。再看看有多少个5或者5或者5的倍数的相乘因子。直到n小于5为止。
代码
class Solution {
public int trailingZeroes(int i) {
int count = 0;
while (i >= 5) {
count += i / 5;
i /= 5;
}
return count;
}
}