zoukankan      html  css  js  c++  java
  • [LeetCode] 172. 阶乘后的零

    题目链接 : https://leetcode-cn.com/problems/factorial-trailing-zeroes/

    题目描述:

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

    示例:

    示例 1:

    输入: 3
    输出: 0
    解释: 3! = 6, 尾数中没有零。
    

    示例 2:

    输入: 5
    输出: 1
    解释: 5! = 120, 尾数中有 1 个零.
    

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

    思路:

    找规律!

    我们先用程序,暴力跑一下,

    5 120
    6 720
    7 5040
    8 40320
    9 362880
    10 3628800
    11 39916800
    12 479001600
    13 6227020800
    14 87178291200
    15 1307674368000
    16 20922789888000
    17 355687428096000
    18 6402373705728000
    19 121645100408832000
    20 2432902008176640000
    21 51090942171709440000
    22 1124000727777607680000
    23 25852016738884976640000
    24 620448401733239439360000
    25 15511210043330985984000000
    26 403291461126605635584000000
    27 10888869450418352160768000000
    28 304888344611713860501504000000
    

    发现能在末尾形成0,来自因子25 ,只有有5,就一定存在一个数可以拆成2(4,6,8)乘以某个数。这样末尾就有0了。

    所以,我们前n数能拆成多少个5出来。

    n =5时候,可以拆出 1

    n=10,拆出2....

    但是,这里n = 25,可以拆出6而不是5,是因为 25自身能多拆一个

    还有125。。。

    相当于 n / 5 + n/ 25 + n /125 ...

    (frac{frac{frac{n}{5}}{5}}{5})

    所以,代码如下

    递归:

    class Solution:
        def trailingZeroes(self, n: int) -> int:
        	return  n // 5 + self.trailingZeroes(n // 5) if n != 0 else 0
    

    非递归:

    class Solution:
        def trailingZeroes(self, n: int) -> int:
            res = 0
            while n > 0:
                n //= 5
                res += n
            return res
    
  • 相关阅读:
    html的入门——从标签开始(2)
    Idea快捷键
    Java_core复习
    gitblit重置管理员密码【gitblit】
    使用命令创建git仓库
    Windows平台下搭建自己的Git服务器【gitblit】
    python笔记
    代码整洁之道
    Vue学习02
    Vue学习01
  • 原文地址:https://www.cnblogs.com/powercai/p/11328803.html
Copyright © 2011-2022 走看看