LeetCode 172.FactorialTrailingZeroes(阶乘后的零)

GitHub链接
链接
CSDN链接

题目

给定一个整数 n, 返回 结果尾数中零的个数。
示例1

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

示例2

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

说明: 算法的时间复杂度应为

方法一(错误的)

求出 的值或者在求的过程中,遇到末尾有0,先除以10来减小数,虽然该算法原理上可以行,但是有两个问题,一、时间复杂度为 ,二、结果不对,出现这个问题的原因是编程语言每种类型有自己的数组范围,因此会溢出。所以该方法实际不可行

方法二

考虑一个问题,位数为零是由2*5产生的,而吧每个数分解,出现5的次数必出现2的次数要少很多,因此,我们通过统计有多少个 5 即可判断尾数有多少个 0.先上代码在将原理

public class LeetCode_172 {
    public int trailingZeroes2(int n) {
        int count = 0;
        while (n > 0) {
            count += n / 5;
            n /= 5;
        }

        return count;
    }

    public static void main(String[] args) {
        LeetCode_172 leetCode = new LeetCode_172();
        System.out.println(leetCode.trailingZeroes(3));
        System.out.println(leetCode.trailingZeroes(5));
        System.out.println(leetCode.trailingZeroes(16));
    }
}

首先我们先统计n 包含一个5的个数,然后统计包含两个5的个数,依次类推。比如:35!,包含一个5的个数为5,10, 15, 20, 25, 30, 35,即35/5 = 7个,然而当我们遇到25的元素时,里面包含两个5,所以通过 ,更大的数一次类推,当 时即停止,在上面代码中表现为n>0;

致谢

感谢大家的阅读和支持, 欢迎大家上星..

你可能感兴趣的:(LeetCode 172.FactorialTrailingZeroes(阶乘后的零))