LeetCode 172:阶乘后的零

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

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

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

  理解:最简单粗暴的方法就是先乘完再说,然后再数尾数有几个零?

  发现规律:在使用暴力破解法的过程中会发现,什么时候会出现零呢?这9个数字中只有2和5相乘才会有0的出现,或者他们的倍数。因此,问题变转变成求这个阶乘数中能匹配多少对2和5的问题。

例如:
  10! = 【2*(2*2)*5*(2*3)*(2*2*2)*(2*5)】

  进一步发现:因子分解之后2的个数肯定是大于5的个数的,所以能匹配多少对取决于5的个数。那么,问题又转变成求这个阶乘数中有多少个5的因子的问题。

  注意:25 = 5*5, 125 = 5*5*5 ,..., 需要额外考虑。

  以下高能!!!


复制代码
# 解法一
class Solution:
    def trailingZeroes(self, n: int) -> int:
        res = 0
        k = 1
        while n >= 5 ** k:
            res += n // (5 ** k)
            k += 1
        return res
复制代码
# 解法二
class Solution:
    def trailingZeroes(self, n: int) -> int:
        if n < 5:
            return 0
        return n // 5 + self.trailingZeroes(n // 5)

END 2019-05-06 21:19:02

posted @   Hider1214  阅读(152)  评论(0编辑  收藏  举报
编辑推荐:
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示