• 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

  • 相关阅读:
    nuxt实践
    安卓H5软键盘遮挡输入框
    h5复制粘贴板,打开APP功能
    MVC3
    MVC3
    C#高编
    接口的显式实现(转)
    E-Retail 框架学习
    C#高编
    实现DIV居中布局三种途径(转)
  • 原文地址:https://www.cnblogs.com/hider/p/10822176.html
Copyright © 2020-2023  润新知