天天看点

力扣(leetcode) 172. 阶乘后的零 (找规律) ----------击败了100%的用户

题目在这:​​https://leetcode-cn.com/problems/factorial-trailing-zeroes/​​

题目分析:

大家注意看这道题的要求:​

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

​​ 说明这道题不能使用任何循环。都会超时。

所以暴力肯定是不行了,

先拿pycharm去找找规律。

我们直接循环打印 999的阶乘,统计一下每个数字后面的0看看情况。

思路分析:

找规律:

力扣(leetcode) 172. 阶乘后的零 (找规律) ----------击败了100%的用户

可以看到,没经过五个数字,末尾为0的个数就多了一个。

而在24到25 之间跳了一个。

力扣(leetcode) 172. 阶乘后的零 (找规律) ----------击败了100%的用户

在49到50之间,又跳了一个。

力扣(leetcode) 172. 阶乘后的零 (找规律) ----------击败了100%的用户

在124到125之间,跳了两个。

力扣(leetcode) 172. 阶乘后的零 (找规律) ----------击败了100%的用户

在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