原题如下:
给定一个整数 n
,返回 n!
结果中尾随零的数量。
提示 n! = n * (n - 1) * (n - 2) * ... * 3 * 2 * 1
0 <= n <= 104
首先,我们需要了解尾随零是什么概念:
n! 中尾随零的个数取决于其展开式中 因子10 的个数,且10由质因子2 和质因子5相乘得来,于是,我们得出,其本质就是计算展开式中质因子2和5的个数,且在数学运算中可以得出,质因子2的个数会远多于质因子5的个数。
因此我们只需要计算出质因子5的个数,就能进而求出尾随零的数量。
class Solution {
public int trailingZeroes(int n) {
int ans = 0;
for(int x = 5;x <= n ;x+=5 ){//外层循环遍历整个n!中有质因子5的数
for(int i = x;i % 5 == 0;i/=5){//对x进行判断,是否满足5的倍数这个条件
ans++;
}
}
return ans;
}
}
复杂度分析
-
时间复杂度:O(n)。(n! 中因子 5的个数为 O(n))
-
空间复杂度:O(1)。