【刷算法】LeetCode- 阶乘后的零
原题地址: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- 阶乘后的零相关推荐
- 【LeetCode 172. 阶乘后的零】
LeetCode 172. 阶乘后的零 题目描述 解题思路 class Solution {public int trailingZeroes(int n) {//思路//计算阶乘后为零的个数 因为2 ...
- Leetcode 172. 阶乘后的零 解题思路及C++实现
解题思路: 找阶乘后的零,本质上是找相乘的因子中5的个数,一般情况中,5的倍数中包含一个因子5,但是5的指数次方如25,就包含了2个因子5,这个要注意. class Solution { public ...
- 【小f的刷题笔记】(JS)阶乘 - 阶乘后的零 LeetCode172 阶乘函数后K个零 LeetCode793
[阶乘] 一.阶乘后的零: LeetCode172 链接: 172.阶乘后的零 题目: 思路: 0的产生是一定是因为2*5产生的,所以就是找因数 并且,可想而知,找的到因数5,必然找的到因数2与之搭配 ...
- 力扣【阶乘问题】leetcode-172、阶乘后的零;leetcode-793、阶乘后K个零;
目录 题目一:172.阶乘后的零 题目二:793.阶乘后K个零 题目一:172.阶乘后的零 给定一个整数 n,返回 n! 结果中,尾数中零的数量 举一个栗子:6!=[ 1 * 2 * 3 * 4 * ...
- 阶乘后的零(C语言)
文章目录 题目分析 代码实现 让我们来看看这道题的描述. 题目:给定一个整数 n ,返回 n! 结果中尾随零的数量. 输入:n = 3 输出:0 解释:3! = 6 ,不含尾随 0 输入:n = 5 ...
- 365天挑战LeetCode1000题——Day 071 阶乘后的零 阶乘函数后 K 个零 最小栈 移除无效的括号
172. 阶乘后的零 代码实现(自解) class Solution {public:int trailingZeroes(int n) {int ans = 0;while (n) {n /= 5; ...
- 【Leetcode - 172】阶乘后的零(思维)
给定一个整数 n ,返回 n! 结果中尾随零的数量. 提示 n! = n * (n - 1) * (n - 2) * ... * 3 * 2 * 1 示例 1: 输入:n = 3 输出:0 解释:3! ...
- leetcode172. 阶乘后的零 最快算法
给定一个整数 n,返回 n! 结果尾数中零的数量. 示例 1: 输入: 3 输出: 0 解释: 3! = 6, 尾数中没有零. 示例 2: 输入: 5 输出: 1 解释: 5! = 120, 尾数中有 ...
- 【leetcode 简单】第四十二题 阶乘后的零
给定一个整数 n,返回 n! 结果尾数中零的数量. 示例 1: 输入: 3 输出: 0 解释: 3! = 6, 尾数中没有零. 示例 2: 输入: 5 输出: 1 解释: 5! = 120, 尾数中有 ...
最新文章
- 常见的和端口,IP相关的企业面试题
- 02-C#入门(循环)
- Maven学习(六)————企业Maven项目最佳实践
- Apache FtpServer配置步骤总结
- 培训班出身的程序员怎么了
- Eclipse自动排版快捷键失效(转)
- 揭秘React同构应用
- java删除目录下符合条件的文件
- RegularExpressions
- 使用docker环境编译驱动
- Atitit 外出活动实名制条例sak令[2018]第920号 《外出活动实名制管理条例》 SAK安全部令 第920号 现发布《外出活动实名制管理条例》,自2018年9月1日起施行。
- 基于单片机的功放protues_音响放大器proteus仿真
- Visual Studio 2013各个版本下载地址
- 网易企业邮箱如何设置反垃圾规则?【网易企业邮箱】
- python arp断网攻击_ARP断网攻击的原理与解决方法讲解 | 小马激活官网
- cannot import name ‘utc‘
- Docker容器安装Mysql8
- AngularJS 双向绑定 input type='file'中文件名,文件内容
- 微信小程序采坑四:下拉刷新不回弹
- 互联网日报 | 2月1日 星期一 | 苏宁宣布云网万店组织架构;威马汽车完成上市辅导;美团上线医疗健康品牌“百寿健康网”...
热门文章
- [POJ1664] 放苹果 (动态规划,组合数学)
- Kerberos KDC not reachable
- Redis:ERR operation not permitted
- 移动端如何定义字体font-family
- C C++ 文件输入与输出
- 「2012-12-29」3x3手机锁屏矩阵图像的组合数量
- 高中选的美术将来能考计算机学校吗,北京中考美术考上美术高中以后上考大学一定要考美术专业的大学?好考美术高中...
- Spring Boot与Spring Cloud是什么关系?
- Microsoft Dynamics CRM server 2013 中业务规则,有点像C#的正则表达式
- inline函数的作用