阶乘后的零
给定一个整数 n,返回 n! 结果尾数中零的数量。
示例 1:
输入: 3
输出: 0
解释: 3! = 6, 尾数中没有零。
示例 2:
输入: 5
输出: 1
解释: 5! = 120, 尾数中有 1 个零.
说明: 你算法的时间复杂度应为 O(log n) 。
分析
核心在于:怎么得到10?
答:2的倍数*5
其次,2和5谁出现的频率高?
答:显然是5,关系是出现两个2之后出现一个5,也就是2的次数永远比5多。
那么就很清晰了,只要直到一共由多少个5就行了,毕竟5的个数不可能超过2的个数,因此有多少个5就有多少个‘’10‘’.
代码
class Solution {
public int trailingZeroes(int n) {
//10只可能由 2*5得到,因此只要找一共有多少个5就可以了
//如25的阶乘中因此包含5的数字:5(1*5),10(2*5),15(3*5),20(4*5),25(5*5),一共出现6个5,而显然因子2的出现次数远远超过6,即尾数0的个数为6
int res = 0;
while(n>0){
res += n/5;
n /=5;
}
return res;
}
}