zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    IDE有毒
    Netbeans 8.2关于PHP的新特性
    什么是人格
    谁该赋予一款产品灵魂?
    自从升级到macOS后,整个人都不好了
    公司不是大家庭
    性能各个指标分析
    Sqlserver2012 alwayson部署攻略
    初探Backbone
    SQL Server AlwaysOn架构及原理
  • 原文地址:https://www.cnblogs.com/hider/p/10822176.html
Copyright © 2011-2022 走看看