Factorial Trailing Zeroes
2015-06-12 19:11
459 查看
Given an integer n, return the number of trailing zeroes in n!.
Note: Your solution should be in logarithmic time complexity.
思路:尾部要出现是0的话,只有2和5相乘才会出现0,只有算出n!的因子中有多少个2*5就可以知道尾部有多少个0了,很显然n!中5的个数少于2的个数,所以只要算出n!中有多少个5相乘就可以了。1*2*3……*n中,5可以贡献出1个5,25=5*5可以贡献出两个5, 125=5*5*5可以贡献出3个5,先计算出5的倍数有多少个(n/5),其中每一个可以先贡献出一个5,注意诸如25,50,75,100等等之类的,由于这些数作为5的倍数已经先贡献出1个5,但是由于是25(25=5*5)的倍数还可以贡献出1个5,接下来计算25的倍数有多少个,即n/25,再可以贡献出一个5,由于125=5*5*5,可以贡献出3个5,但是125作为5和25的倍数已经预先贡献出了两个五,那么125的倍数还可以贡献出1个5,计算出125的倍数即可,即(n/125)....依次进行下去,直到5^x大于等于n。
注意:下面的算法会超时,可能是因为万一n很大,循环中x在不断增大,那么两个大数相除所用的时间会特别长,才会导致超时。
下面的算法可以AC通过。
Note: Your solution should be in logarithmic time complexity.
思路:尾部要出现是0的话,只有2和5相乘才会出现0,只有算出n!的因子中有多少个2*5就可以知道尾部有多少个0了,很显然n!中5的个数少于2的个数,所以只要算出n!中有多少个5相乘就可以了。1*2*3……*n中,5可以贡献出1个5,25=5*5可以贡献出两个5, 125=5*5*5可以贡献出3个5,先计算出5的倍数有多少个(n/5),其中每一个可以先贡献出一个5,注意诸如25,50,75,100等等之类的,由于这些数作为5的倍数已经先贡献出1个5,但是由于是25(25=5*5)的倍数还可以贡献出1个5,接下来计算25的倍数有多少个,即n/25,再可以贡献出一个5,由于125=5*5*5,可以贡献出3个5,但是125作为5和25的倍数已经预先贡献出了两个五,那么125的倍数还可以贡献出1个5,计算出125的倍数即可,即(n/125)....依次进行下去,直到5^x大于等于n。
注意:下面的算法会超时,可能是因为万一n很大,循环中x在不断增大,那么两个大数相除所用的时间会特别长,才会导致超时。
public class Solution { public int trailingZeroes(int n) { int x = 5; int res = 0; while(n >= x) { res = res + n/x; x = x*5; } return res; } }
下面的算法可以AC通过。
public class Solution { public int trailingZeroes(int n) { int res=0; if(n==0) return 0; while(n>0) { res=res+n/5; n=n/5; } return res; } }
相关文章推荐
- Subversion Native Library not available 解决办法
- 打包contrail-web-core
- Swing之下拉框 http://blog.csdn.net/u012643122/article/details/39081017
- sleep和wait的区别
- CDbConnection failed to open the DB connection: SQLSTATE[28000] [1045] Access denied for user 'root'@'localhost' (using password: YES)
- detail屏显示行数条数
- ARC forbids explicit message send of'retain'解决办法
- setContentView(R.layout.activity_main)无法正常引用
- 打包openstack of opencontrail
- Failed to load ldlinx.c32
- HDUOJ贪心算法Repair the wall
- UtraISO制作系统光盘镜像
- [leetcode]Contains Duplicate II
- [leetcode]Contains Duplicate
- 安装apk时出现错误Failure [INSTALL_FAILED_DEXOPT]问题解决的方法
- 通过AIDL实现挂断电话功能
- 人工智能领域中声源定位的研究与发展------第二章 声源定位系统 (3)
- 不懂技术的人请不要对懂技术的人说这很容易
- 打包contrail-setup
- LeetCode 11 Container With Most Water