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

题目在这: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 res

提交击败100%的用户:

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

深度不学习!!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值