Factorial Trailing Zeroes
- leetcode: Factorial Trailing Zeroes | LeetCode OJ
- lintcode:
# @param {integer} n
# @return {integer}
if n < 0:
return -1
count = 0
while n > 0:
n /= 5
count += n
return count
C++
Java
public class Solution {
if (n < 0) {
return -1;
}
int count = 0;
for (; n > 0; n /= 5) {
count += (n / 5);
}
return count;
}
}
- 异常处理,小于0的数返回-1.
- 先计算5的正整数幂都有哪些,不断使用 n / 5 即可知质因数5的个数。
- 在循环时使用
n /= 5
而不是 , 可有效防止溢出。
复杂度分析
可以使用迭代处理的程序往往用递归,而且往往更为优雅。递归的终止条件为n <= 0
.
Python
class Solution {
public:
int trailingZeroes(int n) {
if (n == 0) {
return 0;
} else if (n < 0) {
return -1;
} else {
return n / 5 + trailingZeroes(n / 5);
}
};
Java
源码分析
递归层数最大为 \log_5 n, 返回值均在栈上,可以认为没有使用辅助的堆空间。
- [^wikipedia]: Prime factor - Wikipedia, the free encyclopedia