leecode 每日解题思路 127-Factorial Trailing Zeroes
原题描述:
原题地址: Factorial Trailing Zeroes
题目描述很直接, 给出一个整数N, 求这个N的阶乘后尾有几个零。(要求O(logN)时间复杂度)
个人思路:
一开始,最简单的思维就是直接求要知道, n!的增长速度, 比O(n^2)还要大, 对于32位整型来说, 当N=13的时候, 数据就已经开始溢出了,

好吧, 就算使用long型也是到N=21时,表示数位也不够用了,

那么, 这条路其实是走不通的, (就算考虑使用大数阶乘解决方案, 但这背离了这道题目的初衷,而且也达不到O(logN)的时间复杂度要求):
到这里, 我们先想想,1~10这十个数字,那些数相乘后有末尾零,也就是10的倍数?,显而易见的,只有碰到任意的偶数与5的倍数相乘是,才有得
才会多出一个零。 从而, 我们这边5的倍数这个元素就是关键点。
其实,到了上一步,这个问题已经解决掉一半了, 剩下的工作就是求取给出的1~N个数里, 存在几个5的倍数, done!
当时我就觉得问题已经解决,而且时间复杂度只有O(1)呢 : )

马上提交, 结果呵呵:Wrong Anwser

但是觉得30里不就6个5的倍数么, 得到的数尾应该就是6个零才对啊,然后我仔细盯着着这6个数:

机智的朋友们应该一经发现了, 可是我却呆了一会才发现, 老子当时就是一拍大腿: "卧槽, 还有一种情况没有考虑!"

没错, 就是这个罪魁祸首, 虽然他也是5的倍数, 但是他是5的n次数(包括其倍数, 例如25*4 = 100,100/10 = 10, 还是5的倍数,就是这种情况没考虑), 也就是意味他需要n次消化掉才不会有, 既然还要考虑到5的n次, 那么, 每次每隔5一次数, 然后再在结果中隔5取一次数, done!

这次也是果断提交(时间复杂度 O(log(N)), 底数为5, 肯定比默认底数为2来的更快。):duang!
另外, 关于执行速度, 貌似用C的话, 递归反而是最快的, 我估计是测试用例的问题吧, 反正不在今天的讨论范围,有兴趣的同学自己研究下,或者在评论区指教下,谢谢!
leecode 每日解题思路 127-Factorial Trailing Zeroes的更多相关文章
- leecode 每日解题思路 152 Maximun Product Subarray
问题描述: 问题链接:152 Maximum Product Subarray 在经典的算法解析中, 有关的分治和动态规划的,经典题型之一就是求最大子段和, 这道题就是他的变形:求最大子段积; 这个问 ...
- leecode 每日解题思路 64 Minimum Path Sum
题目描述: 题目链接:64 Minimum Path Sum 问题是要求在一个全为正整数的 m X n 的矩阵中, 取一条从左上为起点, 走到右下为重点的路径, (前进方向只能向左或者向右),求一条所 ...
- leecode 每日解题思路 102-Binary Tree Level Order Traversal
題目描述: 题目链接: 102-Binary Tree Level Order Traversal 这个问题要解决的是如何逐层遍历一个二叉树,并把同一层元素放入同一list中, 再将所有元素返回. 其 ...
- LeetCode172 Factorial Trailing Zeroes. LeetCode258 Add Digits. LeetCode268 Missing Number
数学题 172. Factorial Trailing Zeroes Given an integer n, return the number of trailing zeroes in n!. N ...
- 【LeetCode】172. Factorial Trailing Zeroes
Factorial Trailing Zeroes Given an integer n, return the number of trailing zeroes in n!. Note: Your ...
- LeetCode Day4——Factorial Trailing Zeroes
/* * Problem 172: Factorial Trailing Zeroes * Given an integer n, return the number of trailing zero ...
- LeetCode Factorial Trailing Zeroes Python
Factorial Trailing Zeroes Given an integer n, return the number of trailing zeroes in n!. 题目意思: n求阶乘 ...
- LeetCode 172. 阶乘后的零(Factorial Trailing Zeroes)
172. 阶乘后的零 172. Factorial Trailing Zeroes 题目描述 给定一个整数 n,返回 n! 结果尾数中零的数量. LeetCode172. Factorial Trai ...
- LeetCode_172. Factorial Trailing Zeroes
172. Factorial Trailing Zeroes Easy Given an integer n, return the number of trailing zeroes in n!. ...
随机推荐
- 正则 ?<= 和 ?= 用法
参考网址:http://baike.baidu.com/link?url=2zORJF9GOjU8AkmuHDLz9cyl9yiL68PdW3frayzLwWQhDvDEM51V_CcY_g1mZ7O ...
- Android 内核初识(7)RefBase、LightRefBase、sp和wp
简介 RefBase是Android中所有对象的始祖,类似MFC中的CObject及Java中的Object对象.在Android中,RefBase结合sp和wp,实现了一套通过引用计数的方法来控制对 ...
- 【HDOJ】1086 You can Solve a Geometry Problem too
数学题,证明AB和CD.只需证明C.D在AB直线两侧,并且A.B在CD直线两侧.公式为:(ABxAC)*(ABxAD)<= 0 and(CDxCA)*(CDxCB)<= 0 #includ ...
- Covariance and Contravariance in C#, Part Two: Array Covariance
http://blogs.msdn.com/b/ericlippert/archive/2007/10/17/covariance-and-contravariance-in-c-part-two-a ...
- NTP 服务器配置
1.yum安装ntp 1 yum install ntp* 2.更新时间 1 ntpdate 202.120.2.101 3.加入任务计划 1 2 crontab -e */10 * * * * nt ...
- hdu2852KiKi's K-Number(区间K值)
http://acm.hdu.edu.cn/showproblem.php?pid=2852 区间K值写错了... #include <iostream> #include<cstd ...
- 一步步写STM32 OS【三】PendSV与堆栈操作
一.什么是PendSV PendSV是可悬起异常,如果我们把它配置最低优先级,那么如果同时有多个异常被触发,它会在其他异常执行完毕后再执行,而且任何异常都可以中断它.更详细的内容在<Cortex ...
- Vlan技术总结
VLAN主要有两个作用: vlan可以有效的控制广播域的范围 vlan可以分组设备,增强局域网的安全性(业务隔离) vlan的范围: 一共有4096个vlan,vlan 1为默认vlan.但其中vla ...
- 2015年9月28日JQuery提前预习预热笔记
visual studio下载2010 2010与2008不一样,2008需要添加补丁,采用调用对象.2010可以直接用. JQuery=$ 是函数是方法是对象 念J快儿,念doler 开发人员工具( ...
- Asp.net MVC中的ViewData与ViewBag
Asp.net MVC中的ViewData与ViewBag 在Asp.net MVC 3 web应用程序中,我们会用到ViewData与ViewBag,对比一下: ViewData ViewBag 它 ...