继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

JavaScript实现LeetCode第172题:阶乘后的零

慕标5832272
关注TA
已关注
手记 1071
粉丝 228
获赞 996

首文发表在 172. 阶乘后的零

题目描述

给定一个整数 n,返回 n! 结果尾数中零的数量。

示例 1:

输入: 3
输出: 0
解释: 3! = 6, 尾数中没有零。

示例 2:

输入: 5
输出: 1
解释: 5! = 120, 尾数中有 1 个零.

思路

这个问题可以用数学的方法简单分析;
10 = 2 * 5(质因数分解)

从最末尾开始连续地每出现一个0,即表示有一个 (2 * 5) 组出现。
而对于正整数 N,在[0, N]范围内,质因子中含有 2 的总是会比质因子含有 5 的要多。即如果质因子有 5 的数字总数为 a,那么质因子为2的总数 b >= a。因此,有x个质因子含有 5 的数,就有至少x个含有 2 的数。

于是,只要需要知道质因数含有 5 的数字有多少个,即可知道末尾连续出现 0 的个数有多少

解决方案

/**
 * @param {number} n
 * @return {number}
 */var trailingZeroes = function (n) {    let count = 0;    // 因为可能出现一个数的质因子有多个5
    while (n >= 5) {
        n = Math.floor(n / 5);
        count += n;
    }    return count;
};



作者:funnycoderstar
链接:https://www.jianshu.com/p/7b0728fb95c9


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP