阶乘后的零

阶乘后的零

Leetcode 172. 阶乘后的零

题意

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

示例一

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

示例二

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

说明

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

分析:

  1. 通过对阶乘组成的数进行质数分解,可得阶乘出现尾数为零的结果,只能由5*2所构成,而2的个数远多于5的个数,因此只需计算质数分解后5出现的个数即可。
  2. 假设n=25,那么由质数分解后,出现5的数总共有5, 10, 15, 20, 25,尾数出现零的个数为6个;
  3. 其中25为5^2,因此,n=25的可以简单记为n分别除以5^1,5^2,5^3,...,5^k,结果的和。

综上,代码为:

class Solution {
public:
    int trailingZeroes(int n) {
        // 判断n是否为零,若为零则返回零,否则返回质数分解中5出现的个数。
        return n == 0 ? 0 : n/5 + trailingZeroes(n/5);
    }
};
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容