172. 阶乘后的零

题目描述

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

示例 1:

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

输入: 5
输出: 1
解释: 5! = 120, 尾数中有 1 个零.
说明: 你算法的时间复杂度应为 O(log n) 。

思路

其实也就是求阶乘能分解的10的个数,由于10=2*5,而2出现的次数一定多于5出现的次数,所以也就是求5的个数,n!=1*2*3...n=a*b
其中an的阶乘每一项中能被5整除的所有项的乘积,a = (1*5)*(2*5)*(3*5)...(n/5 * 5) = 5^(n/5)*(1*2*3*...*n/5)=5^(n/5)*(n/5)!
b为n的阶乘中除了a之外的其它所有项的乘积,所以n!的阶乘中能分解出的5的个数=n/5 + (n/5)!能分解出的5的个数.

代码实现1

递归实现

class Solution {
public:
    int trailingZeroes(int n) {
        
        if(n <5)
            return 0;
        return n/5+trailingZeroes(n/5);
        
    }
};

代码实现2

循环实现,根据递归公式

class Solution {
public:
    int trailingZeroes(int n) {
                 
    int cnt = 0;
    while(n>=5)
    {
        cnt+=n/5;
        n/=5;
    }
    return cnt;    
        
    }
};

posted on 2021-06-13 17:13  朴素贝叶斯  阅读(27)  评论(0编辑  收藏  举报

导航