题目:
给定一个整数 n,返回 n! 结果尾数中零的数量。
示例 1:
输入: 3
输出: 0
解释: 3! = 6, 尾数中没有零。
示例 2:输入: 5
输出: 1
解释: 5! = 120, 尾数中有 1 个零.
说明: 你算法的时间复杂度应为 O(log n) 。
思路:
两个数相乘结果末尾有 0,一定是因为两个数中有因子 2 和 5,因为 10 = 2 x 5。
也就是说,问题转化为:
n!最多可以分解出多少个因子 2 和 5这个主要取决于能分解出几个因子 5,因为每个偶数都能分解出因子 2,因子 2 肯定比因子 5 多得多。
现在,问题转化为:
n!最多可以分解出多少个因子 5
代码实现:
/**
* @param {number} n
* @return {number}
*/
var trailingZeroes = function (n) {
let res = 0;
let divisor = 5;
while (divisor <= n) {
res += parseInt(n / divisor);
divisor *= 5;
}
return res;
};
运行结果:

本文介绍了一种高效算法,用于计算给定整数n的阶乘结果中尾数零的数量。通过分析因子2和5的分布规律,确定了算法的实现思路,并给出了具体的代码实现。
leetcode 172. 阶乘后的零&spm=1001.2101.3001.5002&articleId=114747725&d=1&t=3&u=aa6ab608ad804927b5bea76d098b23f2)
546

被折叠的 条评论
为什么被折叠?



