【转】[LeetCode] Factorial Trailing Zeroes
2015-08-25 10:58
429 查看
这道题没有A出来,切入点不对,都是先算了阶乘再求末尾的0,导致时间复杂度过大。
现转载网上一篇很简明直接的思路,共勉:
链接是:http://www.danielbit.com/blog/puzzle/leetcode/leetcode-factorial-trailing-zeroes
[分析]
首先别忘了什么是factorial,就是阶乘。那么很容易想到需要统计(2,5)对的个数,因为2×5=10。但是这个条件放松一下就会发现其实只要数5的个数就好了,因为2实在是比5要多的多。
那么这道题目就转化成为计算从1到n之间所有数的5的约数个数总和。很简单的想到能不能用n/5得到。比如当n为19的时候,19/5 = 3.8,那么就是有3个约数包含5的数,分别是5, 10, 15。但是有的数可能被5整除多次,比如说25。这样的数一个就能给最后的factorial贡献好几个5。
最后的解法就是对n/5+n/25+n/125+…+进行求和,当n小于分母的时候,停止。分母依次为5^1, 5^2, 5^2… 这样的话在计算5^2的时候,能被25整除的数里面的两个5,其中一个已经在5^1中计算过了。所以5^2直接加到count上。
代码是自己写的:
好吧,里面 i 用 long 就是因为 i 在不断乘 5 的过程中,对于某些验证数据,int 类型会有越界的情况出现。
现转载网上一篇很简明直接的思路,共勉:
链接是:http://www.danielbit.com/blog/puzzle/leetcode/leetcode-factorial-trailing-zeroes
[分析]
首先别忘了什么是factorial,就是阶乘。那么很容易想到需要统计(2,5)对的个数,因为2×5=10。但是这个条件放松一下就会发现其实只要数5的个数就好了,因为2实在是比5要多的多。
那么这道题目就转化成为计算从1到n之间所有数的5的约数个数总和。很简单的想到能不能用n/5得到。比如当n为19的时候,19/5 = 3.8,那么就是有3个约数包含5的数,分别是5, 10, 15。但是有的数可能被5整除多次,比如说25。这样的数一个就能给最后的factorial贡献好几个5。
最后的解法就是对n/5+n/25+n/125+…+进行求和,当n小于分母的时候,停止。分母依次为5^1, 5^2, 5^2… 这样的话在计算5^2的时候,能被25整除的数里面的两个5,其中一个已经在5^1中计算过了。所以5^2直接加到count上。
代码是自己写的:
public static int trailingZeroes(int n) { int result = 0; if (n < 0) { return -1; } for (long i = 5; (n / i) >= 1; i = i * 5) { result += n / i; } return result; }
好吧,里面 i 用 long 就是因为 i 在不断乘 5 的过程中,对于某些验证数据,int 类型会有越界的情况出现。
相关文章推荐
- 010_leetcode Container With Most Water
- Command-cat, tac, file, history, tree,tee…
- 转载Rain Man 怀仁怀朴,唯真唯实。的随记
- 在OnPaint中必须调用一次BeginPaint和EndPaint,且也只能调用一次
- aix5.3和aix6.1的VMO参数对比
- QWaitCondition解决打印日志卡的问题
- Fail-fast的原因及解决方法
- Fail-fast的原因及解决方法
- AIZU2303marathon match 概率
- Codeforces Round #317 [AimFund Thanks-Round] (Div. 2)
- Codeforces Round #317 [AimFund Thanks-Round] (Div. 1) B
- 为什么Android每当启动一个新的应用程序时会通过“throw new ZygoteInit.MethodAndArgsCaller(m, argv)”进入ActivityThread的main函数
- Run-Time Check Failure #2 - Stack around the variable 'myTrackbarName' was corrupted.
- 【Linux学习】epoll详解 http://blog.csdn.net/xiajun07061225/article/details/9250579
- Factorial Trailing Zeroes
- HDU 4300 Clairewd’s message(KMP)
- KMP HDOJ 4300 Clairewd's message
- Failed to install metadata only whitespace content allowed before start tag and not \u0
- HDU2389 Rain on your Parade(二分图匹配 ,HK算法 )
- Aizu - 2306 Rabbit Party (DFS图论)