172. 阶乘后的零

  1. [题目链接](172. 阶乘后的零 - 力扣(LeetCode))

  2. 解题思路:首先得知道,n!一共有多少个0,取决于什么。取决于1~n所有2的因数的个数和5的因数的个数。因为0,其实就是2*5得到的。

    • 怎么用对数时间计算1~n,2因子的个数?
      • 一种特殊的是2的幂次的,比如2、4、8、16,含有2因子的个数分别是1,2,3,4
      • 另一种不是2的幂次,但是含有2这个因数,比如:6,10,12,14,含有2因子的个数分别是:1,1,2,1
      • 好像没什么规律?其实不然,当我们算2的幂次的时候,假如n=16,现在计算的是2,用n/2,得到8,这8代表有8个因子,那么这8个因子分别从哪来的?从2(1)、4(1)、8(1)、16(1)、6(1)、10(1)、12(1)、14(1),括号中的代表因子个数。然后我们再计算2^2也就是4,然后再n/4,得到4,代表有4个因子,这4个因子哪来的?从4(1)、8(1)、16(1)、12(1),然后再计算2^3也就是8,用n/8,得到2,代表有2个因子,这2个因子哪来的,从8(1)、16(1),然后再计算2^4也就是16,用n/16,也就是1,代表有1个因子,这1个因子哪来的,从16(1)来的。
      • 也就是说,在分别计算幂次的时候,把所有的2因子提取出来了
    • 计算5的因子个数同理
  3. 代码

    class Solution:
    # 计算1~n有几个num的因子
    def count_factors(self, n, factor):
    count = 0
    power = factor
    while power <= n:
    count += n // power
    power *= factor
    return count
    def trailingZeroes(self, n: int) -> int:
    count_2 = self.count_factors(n, 2)
    count_5 = self.count_factors(n, 5)
    return min(count_2, count_5)
posted @   ouyangxx  阅读(3)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示