题干
给定一个整数 n,返回 n! 结果尾数中零的数量。
示例 1:
输入: 3
输出: 0
解释: 3! = 6, 尾数中没有零。
示例 2:
输入: 5
输出: 1
解释: 5! = 120, 尾数中有 1 个零.
说明: 你算法的时间复杂度应为 O(log n) 。
想法
我们先看一下:
1×5 → 5! → 1个0
2×5 → 10! → 2个0
3×5 → 15! → 3个0
4×5 → 20! → 4个0
5×5 → 25! → 6个0
6×5 → 30! → 7个0
7×5 → 35! → 8个0
8×5 → 40! → 9个0
9×5 → 45! → 10个0
10×5 → 50! → 12个0
11×5 → 55! → 13个0
不知道大家有没有发现规律:
每出现一次2×5,就会有一个0;但是因为是阶乘,2出现的次数肯定比5多,所以只考虑5就可以了。
但是!
从25开始不对劲了,仔细想一下,因为25有两个5啊。
所以规律是这样的:
用n来➗5,再把商作为新的n,累加这个n
相当于就是计算了除了单5,还考虑了25
125这样子。
Java代码
class Solution {
public int trailingZeroes(int n) {
int count=0;
while(n!=0){
n/=5;
count+=n;
}
return count;}
}
总结
这道题的要点不在于写代码也不在于算法啊,这真的是一道数学题…