题目描述
给定一个整数 n ,返回 n! 结果中尾随零的数量。
提示 n! = n * (n - 1) * (n - 2) * ... * 3 * 2 * 1
示例 1:
输入:n = 3
输出:0
解释:3! = 6 ,不含尾随 0
示例 2:
输入:n = 5
输出:1
解释:5! = 120 ,有一个尾随 0
示例 3:
输入:n = 0
输出:0
提示:
0 <= n <= 104
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/factorial-trailing-zeroes
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
我的思路:统计尾部0的个数->如果有则个位不能为0->个位不能为0则判断什么时候个位不为0:4!=24,5!=120,6!=120*6,7!=120*6*7....10!=120*6*7*8*9*10=6*7*8个1200 ->得出结论,其余乘值不会影响末尾的0,而每出现一个10就会多一个0
所以我需要知道有多少个10->又因为10=2*5,所以需要知道有多少个2*5,2的个数足够多,所以只需要统计5的个数即末尾0的个数。(查看解答,还不错符合标准答案。脑机急转弯真麻烦)
答案代码:
class Solution { public: int trailingZeroes(int n) { int ans = 0; for (int i = 5; i <= n; i += 5) { for (int x = i; x % 5 == 0; x /= 5) { ++ans; } } return ans; } };
复杂度分析
-
时间复杂度:O(n)。n! 中因子 5 的个数为 O(n)
-
空间复杂度:O(1)。
Leetcode官方列式计算:我看的时候,我草..
换一个角度考虑 [1,n] 中质因子 p的个数。[1,n] 中 p 的倍数有 n1=⌊n/p⌋ 个,这些数至少贡献出了 n1个质因子 p。p^2的倍数有 n2=⌊ n/p^2 ⌋ 个,由于这些数已经是 p 的倍数了,为了不重复统计 p 的个数,我们仅考虑额外贡献的质因子个数,即这些数额外贡献了至少 n2 个质因子 p。依此类推,[1,n] 中质因子 p 的个数为k=1∑∞⌊n/p^k⌋

class Solution { public: int trailingZeroes(int n) { int ans = 0; while (n) { n /= 5; ans += n; } return ans; } }; 作者:LeetCode-Solution 链接:https://leetcode-cn.com/problems/factorial-trailing-zeroes/solution/jie-cheng-hou-de-ling-by-leetcode-soluti-1egk/ 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
总结
分析问题的时候需要细化问题,为了更好的解决可以进行列式解决问题。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)