原题地址:LeetCode中国-172

题目描述

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

示例 1:

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

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

说明: 你算法的时间复杂度应为 O(log n) 。

分析

首先暴力破解法就是直接把最终的结果求出来然后看末尾有几个0,但是这样做的时间复杂度肯定是太大了。

然后考虑到末尾的0是怎么形成的,首先10=2*5,20=2*2*5,30=3*2*5 ... 100=10*2*5

所以,问题的关键是看阶乘里面2和5的数量,但是因为显然2出现的数量大于5出现的数量,拿5的阶乘来举例子:

5!= (1) * (2) * (3) * (2*2) * (5)

出现了3个2、1个5,但是末尾只有1个0,所以阶乘末尾0的个数就是阶乘式中5的个数。但是如解法1的代码所示,时间复杂度还是太高。

继续考虑,对于50!,我们可以写成:

5 ... 2*5 ... 3*5 ... 4*5 ... 5*5 ... 6*5 ... 7*5 ... 8*5 ... 9*5 ... 10 * 5

可以看出来从5到10*5一共有10个5,但是对于10来说,从1到10还有2个5,所以50!的结果末尾有12个0

解法1(不符合要求的时间复杂度)

var trailingZeroes = function(n) {var count  = 0;for(var i = 1;i <= n;i++){var temp = i;while(temp%5 === 0){count++;temp /= 5;}}return count;
};

上面这个解法的时间复杂度是n*(logn),不符合题意

解法2

var trailingZeroes = function(n) {var count  = 0;while(n) {count += divide(n,5);n = divide(n,5);}return count;
};function divide(n, m) {return Math.floor(n/m);
}

【刷算法】LeetCode- 阶乘后的零相关推荐

  1. 【LeetCode 172. 阶乘后的零】

    LeetCode 172. 阶乘后的零 题目描述 解题思路 class Solution {public int trailingZeroes(int n) {//思路//计算阶乘后为零的个数 因为2 ...

  2. Leetcode 172. 阶乘后的零 解题思路及C++实现

    解题思路: 找阶乘后的零,本质上是找相乘的因子中5的个数,一般情况中,5的倍数中包含一个因子5,但是5的指数次方如25,就包含了2个因子5,这个要注意. class Solution { public ...

  3. 【小f的刷题笔记】(JS)阶乘 - 阶乘后的零 LeetCode172 阶乘函数后K个零 LeetCode793

    [阶乘] 一.阶乘后的零: LeetCode172 链接: 172.阶乘后的零 题目: 思路: 0的产生是一定是因为2*5产生的,所以就是找因数 并且,可想而知,找的到因数5,必然找的到因数2与之搭配 ...

  4. 力扣【阶乘问题】leetcode-172、阶乘后的零;leetcode-793、阶乘后K个零;

    目录 题目一:172.阶乘后的零 题目二:793.阶乘后K个零 题目一:172.阶乘后的零 给定一个整数 n,返回 n! 结果中,尾数中零的数量 举一个栗子:6!=[ 1 * 2 * 3 * 4 * ...

  5. 阶乘后的零(C语言)

    文章目录 题目分析 代码实现 让我们来看看这道题的描述. 题目:给定一个整数 n ,返回 n! 结果中尾随零的数量. 输入:n = 3 输出:0 解释:3! = 6 ,不含尾随 0 输入:n = 5 ...

  6. 365天挑战LeetCode1000题——Day 071 阶乘后的零 阶乘函数后 K 个零 最小栈 移除无效的括号

    172. 阶乘后的零 代码实现(自解) class Solution {public:int trailingZeroes(int n) {int ans = 0;while (n) {n /= 5; ...

  7. 【Leetcode - 172】阶乘后的零(思维)

    给定一个整数 n ,返回 n! 结果中尾随零的数量. 提示 n! = n * (n - 1) * (n - 2) * ... * 3 * 2 * 1 示例 1: 输入:n = 3 输出:0 解释:3! ...

  8. leetcode172. 阶乘后的零 最快算法

    给定一个整数 n,返回 n! 结果尾数中零的数量. 示例 1: 输入: 3 输出: 0 解释: 3! = 6, 尾数中没有零. 示例 2: 输入: 5 输出: 1 解释: 5! = 120, 尾数中有 ...

  9. 【leetcode 简单】第四十二题 阶乘后的零

    给定一个整数 n,返回 n! 结果尾数中零的数量. 示例 1: 输入: 3 输出: 0 解释: 3! = 6, 尾数中没有零. 示例 2: 输入: 5 输出: 1 解释: 5! = 120, 尾数中有 ...

最新文章

  1. 常见的和端口,IP相关的企业面试题
  2. 02-C#入门(循环)
  3. Maven学习(六)————企业Maven项目最佳实践
  4. Apache FtpServer配置步骤总结
  5. 培训班出身的程序员怎么了
  6. Eclipse自动排版快捷键失效(转)
  7. 揭秘React同构应用
  8. java删除目录下符合条件的文件
  9. RegularExpressions
  10. 使用docker环境编译驱动
  11. Atitit 外出活动实名制条例sak令[2018]第920号 《外出活动实名制管理条例》     SAK安全部令 第920号 现发布《外出活动实名制管理条例》,自2018年9月1日起施行。
  12. 基于单片机的功放protues_音响放大器proteus仿真
  13. Visual Studio 2013各个版本下载地址
  14. 网易企业邮箱如何设置反垃圾规则?【网易企业邮箱】
  15. python arp断网攻击_ARP断网攻击的原理与解决方法讲解 | 小马激活官网
  16. cannot import name ‘utc‘
  17. Docker容器安装Mysql8
  18. AngularJS 双向绑定 input type='file'中文件名,文件内容
  19. 微信小程序采坑四:下拉刷新不回弹
  20. 互联网日报 | 2月1日 星期一 | 苏宁宣布云网万店组织架构;威马汽车完成上市辅导;美团上线医疗健康品牌“百寿健康网”...

热门文章

  1. [POJ1664] 放苹果 (动态规划,组合数学)
  2. Kerberos KDC not reachable
  3. Redis:ERR operation not permitted
  4. 移动端如何定义字体font-family
  5. C C++ 文件输入与输出
  6. 「2012-12-29」3x3手机锁屏矩阵图像的组合数量
  7. 高中选的美术将来能考计算机学校吗,北京中考美术考上美术高中以后上考大学一定要考美术专业的大学?好考美术高中...
  8. Spring Boot与Spring Cloud是什么关系?
  9. Microsoft Dynamics CRM server 2013 中业务规则,有点像C#的正则表达式
  10. inline函数的作用