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。
方法一:
1 2 3 4 5 6 7 8 9 10 | class Solution { public int trailingZeroes( int n) { int res= 0 ; while (n!= 0 ){ n/= 5 ; res+=n; } return res; } } |
方法二:超时
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步