172 Factorial Trailing Zeroes 阶乘后的零
给定一个整数 n,返回 n! 结果尾数中零的数量。
注意: 你的解决方案应为对数时间复杂度。
详见:https://leetcode.com/problems/factorial-trailing-zeroes/description/
Java实现:
N的阶乘可以分解为: 2的X次方,3的Y次方,4的K次方,5次Z方,.....的乘积。由于10 = 2 * 5,所以M只能和X和Z有关,每一对2和5相乘就可以得到一个10,于是M = MIN(X,Z),不难看出X大于Z,因为被2整除的频率比被5整除的频率高的多。所以可以把公式简化为M=Z。
方法一:
class Solution { public int trailingZeroes(int n) { int res=0; while(n!=0){ n/=5; res+=n; } return res; } }
方法二:超时
class Solution { public int trailingZeroes(int n) { int res=0; for(int i=5;i<=n;++i){ int m=i; while(m%5==0){ ++res; m/=5; } } return res; } }
参考:https://www.cnblogs.com/grandyang/p/4219878.html