题目在这:https://leetcode-cn.com/problems/factorial-trailing-zeroes/
题目分析:
大家注意看这道题的要求:
说明: 你算法的时间复杂度应为 O(log n) 。
说明这道题不能使用任何循环。都会超时。
所以暴力肯定是不行了,
先拿pycharm去找找规律。
我们直接循环打印 999的阶乘,统计一下每个数字后面的0看看情况。
思路分析:
找规律:
可以看到,没经过五个数字,末尾为0的个数就多了一个。
而在24到25 之间跳了一个。
在49到50之间,又跳了一个。
在124到125之间,跳了两个。
在624到625之间跳了三个。
所以找到规律,这个数每次到5的倍数时,跳一个(累加)往后继续增长.
比如55 = 25处跳了一个,555 = 125处跳了一个。5555 = 625处跳了一个。
所以我们只需要看看数字包含多少个5 多少个25 多少个125 多少个625.。。。。。。。直到大于所给数字,
完整代码
class Solution:
def trailingZeroes(self, n: int) -> int:
res = 0
temp = 5
while True:
res += n // temp
temp *= 5
if temp >n:
break
print(res)
return