其他分享
首页 > 其他分享> > [编号][1][刷题][LeetCode][脑筋急转弯][中等][172. 阶乘后的零]

[编号][1][刷题][LeetCode][脑筋急转弯][中等][172. 阶乘后的零]

作者:互联网

题目描述

给定一个整数 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;
    }
};

复杂度分析



 

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

 

 

 

总结

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

标签:10,int,个数,LeetCode,120,因子,ans,阶乘,172
来源: https://www.cnblogs.com/MC5522/p/16057186.html