zoukankan      html  css  js  c++  java
  • Java 计算N阶乘末尾0的个数-LeetCode 172 Factorial Trailing Zeroes

    题目

    Given an integer n, return the number of trailing zeroes in n!.

    Note: Your solution should be in logarithmic time complexity.

    分析

    Note中提示让用对数的时间复杂度求解,那么如果粗暴的算出N的阶乘然后看末尾0的个数是不可能的。

    所以仔细分析,N! = 1 * 2 * 3 * ... * N 而末尾0的个数只与这些乘数中5和2的个数有关,因为每出现一对5和2就会产生一个10那么N!末尾一定会有一个0。然而进一步分析会发现,因子中2的个数肯定是大于5的个数,所以我们只要找出N!中因子5的总个数即可。

    1.给定N那么N/5会得到所有5*1, 5*2, 5*3......的个数

    2.N/25会得到所有25*1, 25*2, 25*3.....的个数

    3.N/125会得到所有125*1, 125*2, 125*3.......的个数

    ........

    可能会有疑问,25中有两个5,125中有3个5会不会少算,但是仔细观察会发现,在第1步中已经对25的情况算了一次,第2步相当于把另一个5统计进来,以此类推

    代码

    1     public int trailingZeroes(int n) {
    2         int rs = 0;
    3         while (n != 0) {
    4             rs += (n / 5);
    5             n /= 5;
    6         }
    7         return rs;
    8     }

    这样就得出了结果

  • 相关阅读:
    HTTP 缓存图解
    http协议构成整理
    HTTP2.0
    Event Loop
    斐波那契数列
    归并排序
    快速排序
    史上最全前端资源
    Js 将 Date 转化为指定格式的String
    vue-cli webpack全局引入jquery
  • 原文地址:https://www.cnblogs.com/xlturing/p/4494020.html
Copyright © 2011-2022 走看看