LeetCode笔记——172阶乘后的零

题目:

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

示例 1:

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

示例 2:

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

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

思路:看了题之后我自己想的是先求出阶乘最后的结果,然后检查结果是否能整除10,100.。。。来判断有多少个零。但这种算法时间复杂度应该达不到要求。后来百度了下大神们的思路和代码。对于给定的整数来说,n是5时出现一个0,n是25时出现两个0,n是125时出现3个0.以100的阶乘为例,直接对100进行计算,结果中0 的个数等于5的倍数加上25的倍数,因为100不是125的倍数,所以只判断到25.25还是5的倍数,所以0的个数num=100/5+100/25=24.以下是参考大神们的思路写的代码:

代码:

class Solution {
    public int trailingZeroes(int n) {
        int sum=0;
        int count=n;
        while(count!=0)
        {
            sum=sum+count/5;
            count=count/5;
        }
        return sum;
    }
}

以下是执行时间最快的代码:

但是这个时间复杂度是怎么求的?

class Solution {
  /**
     * 返回N阶乘后尾数0的个数
     * 时间复杂度应该是log N
     *
     * @param n
     * @return
     */
    public int trailingZeroes(int n) {
        int num = 0;
        // 采用分冶法的思想
        while (n != 0) {
            num += n / 5;
            n = n / 5;


        }
        return num;
    }
}

你可能感兴趣的:(LeetCode笔记)