本人使用环境Python3+Pycharm。最近恢复刷题,持续更新,能点赞的点点赞,抱拳了
【172】给定一个整数 n,返回 n! 结果尾数中零的数量。时间复杂度不超过logn
题目分析:硬核解法就是直接把n!算出来,然后数0。确实能够实现,但是时间复杂度是O(n)。接下来我们就要转变思想,怎么搞这个东西,首先既然是数0,那么什么会产生0?一定是2x5,4x5,6x5,8x5,或者是10,20这些,他们都有一个共同的特点就是他们都可以拆成5和……,2和……。
到这里我们会发现2的个数永远比5多10个数 我们就可以发现5只有2个,2可以有5个,这个地方一定要理解。这道题已经让我们从n!的结果数0,变成了数阶乘中2和5的最小个数,再变成数5的个数。说到这里这个问题就很明了了。
O(n)=log5(n)
class Solution127:
def trailingZeroes(self, n: int) -> int:
#sum 是为了计算5的个数
sum = 0
while n >= 5:
#//是整数除法,比如25里面有5个5,10里面有2个5
n = n // 5
sum += n
return sum