原题描述:

原题地址: 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的更多相关文章

  1. leecode 每日解题思路 152 Maximun Product Subarray

    问题描述: 问题链接:152 Maximum Product Subarray 在经典的算法解析中, 有关的分治和动态规划的,经典题型之一就是求最大子段和, 这道题就是他的变形:求最大子段积; 这个问 ...

  2. leecode 每日解题思路 64 Minimum Path Sum

    题目描述: 题目链接:64 Minimum Path Sum 问题是要求在一个全为正整数的 m X n 的矩阵中, 取一条从左上为起点, 走到右下为重点的路径, (前进方向只能向左或者向右),求一条所 ...

  3. leecode 每日解题思路 102-Binary Tree Level Order Traversal

    題目描述: 题目链接: 102-Binary Tree Level Order Traversal 这个问题要解决的是如何逐层遍历一个二叉树,并把同一层元素放入同一list中, 再将所有元素返回. 其 ...

  4. 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 ...

  5. 【LeetCode】172. Factorial Trailing Zeroes

    Factorial Trailing Zeroes Given an integer n, return the number of trailing zeroes in n!. Note: Your ...

  6. LeetCode Day4——Factorial Trailing Zeroes

    /* * Problem 172: Factorial Trailing Zeroes * Given an integer n, return the number of trailing zero ...

  7. LeetCode Factorial Trailing Zeroes Python

    Factorial Trailing Zeroes Given an integer n, return the number of trailing zeroes in n!. 题目意思: n求阶乘 ...

  8. LeetCode 172. 阶乘后的零(Factorial Trailing Zeroes)

    172. 阶乘后的零 172. Factorial Trailing Zeroes 题目描述 给定一个整数 n,返回 n! 结果尾数中零的数量. LeetCode172. Factorial Trai ...

  9. LeetCode_172. Factorial Trailing Zeroes

    172. Factorial Trailing Zeroes Easy Given an integer n, return the number of trailing zeroes in n!. ...

随机推荐

  1. 手势识别官方教程(7)识别缩放手势用ScaleGestureDetector.GestureDetector和ScaleGestureDetector.SimpleOnScaleGestureListener

    Use Touch to Perform Scaling As discussed in Detecting Common Gestures, GestureDetector helps you de ...

  2. POI导出数据内存溢出问题

    POI之前的版本不支持大数据量处理,如果数据过多则经常报OOM错误,有时候调整JVM大小效果也不是太好.3.8版本的POI新出来了SXSSFWorkbook,可以支持大数据量的操作,只是SXSSFWo ...

  3. MFC框架

    第一点:类别型录网的搭建: 类别型录网搭建的目的是为了实现所谓的"执行期类型识别",也就是在程序运行的时候识别出某个对象是否是某个类的实例(基类也可以).这里还不是很明白为什么需要 ...

  4. apache虚拟主机的设置

    方法一: 首先打开apache中conf下的http.conf文件打开虚拟主机的注释:如下去掉第二行前面的#即可 # Virtual hosts# Include conf/extra/httpd-v ...

  5. VS2005 工程在win7下使用管理员权限运行

    想关资料 http://stackoverflow.com/questions/13030492/set-administrator-privilege-for-my-c-application-in ...

  6. CORREL

    CORREL Show All Returns the correlation coefficient of the array1 and array2 cell ranges. Use the co ...

  7. ZOJ 3791 An Easy Game

     思路:dp+记忆化搜索,设dp[n][m]表示s1与s2不同字符个数为n,还需要变m步的方法数,那么: dp[n][m]  = (c[n][i]*c[N-n][K-i]) * dp[n-i+(K-i ...

  8. 利用Testng注释实现多线程并发测试

    Testng 是一款非常优秀的测试框架,真正从测试角度出发,为测试所想.在测试过程中我们经常会遇到对某一个场景做并发请求,主要想了解该程序在并发时是否会有异常或者没考虑到的其他情况,这时往往不是要做性 ...

  9. kafka的安装和使用

    简单说kafka是一个高吞吐的分部式消息系统,并且提供了持久化. kafka的架构 • producer:消息生存者• consumer:消息消费者• broker:kafka集群的server,负责 ...

  10. sed写的命令收集

    1. 替换一行字符串. <title name= > <param name="root", value="haha"/> <pa ...