随笔 - 2  文章 - 0 评论 - 0 阅读 - 74
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

题目描述

给定一个整数 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个质因子 pp^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)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
View Code
复制代码

 

 

 

总结

分析问题的时候需要细化问题,为了更好的解决可以进行列式解决问题。

posted on   伍五仁二—5522  阅读(23)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示