给定一个整数 n
,返回 n!
结果中尾随零的数量。
提示 n! = n * (n - 1) * (n - 2) * ... * 3 * 2 * 1
示例 1:
输入:n = 3 输出:0 解释:3! = 6 ,不含尾随 0
示例 2:
输入:n = 5 输出:1 解释:5! = 120 ,有一个尾随 0
示例 3:
输入:n = 0 输出:0
提示:
0 <= n <= 104
思路:
1、尾随零最终都可以分解为2*5得到的;
2、一个数质因数分解2的个数一定不少于5,所以可以统计n!中有多少个质因数5;
3、n!中质因数5的个数为,1、2、3...n-1、n中分别含有的质因数5 的个数之和;
4、只有5的倍数中存在质因数5,即5、10、15...
var trailingZeroes = function(n) {
//记录质因数5的个数
let res = 0;
//分别遍历5 10 15 ...
for(let i = 5;i <= n;i += 5){
//判断每个数中有多少个质因数5并加到res上
for(let j = i;j % 5 == 0;j /= 5){
res++
}
}
return res
};
时间复杂度:O(n) n!中质因数5的个数为O(n)
空间复杂度:O(1)