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
其中a
为n
的阶乘每一项中能被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;
}
};