阶乘后的零

给定一个整数n,返回n!结果尾数中零的数量。

示例1:

1
2
3
输入: 3
输出: 0
解释: 3!= 6,尾数中没有零。

示例2:

1
2
3
输入: 5
输出: 1
解释: 5!= 120,尾数中有1个零。

说明:你算法的时间复杂度应为 O(log n) 。

解题思路:

10 -> 2*5

2的数量肯定比5要多

我们只需要计算5的个数即可

n count size
5 1 1
10 2 1
15 3 1
20 4 1
25 6 2
30 7 1
35 8 1
40 9 1
45 10 1
50 12 2
55 13 1
60 14 1
125 3

开始计算含有1个5的个数:n/5就得到含有一个5的个数,然后将已经计算过一次的数排除n/=5

现在得到含有2个5的数,也就是25的倍数的数

开始计算含有2个5的数的个数:n/5

直到n=0,代表,一个数都没有了,结束

代码:

1
2
3
4
5
6
7
8
public int trailingZeroes(int n) {
int count = 0;
while (n > 0) {
count += n / 5;
n /= 5;
}
return count;
}