面试题 16.05.阶乘尾数

文章讨论了解决LeetCode题目中的阶乘尾数问题,关键在于计算5的幂在阶乘中出现的次数。通过观察2和5在阶乘中的影响,得出5的个数计算方法,避免了直接遍历5的倍数导致的时间复杂度过高。官方题解提供了解决方案。
摘要由CSDN通过智能技术生成

​​题目来源:

        leetcode题目,网址:面试题 16.05. 阶乘尾数 - 力扣(LeetCode)

解题思路:

       在不包括自身的情况下,10 只可以分解为 2*5 。显然求阶乘过程中,2 的个数远远多于 5 的个数,因此只需要求 5 的个数即可。

        区间 [1,n] 内 5 的倍数的个数为 n/5;区间[1,n] 中 25=5*5 的倍数的个数为 n/25.......因此区间[1,n] 内 5 的个数为 n/5+2*n/25+3*n/75......,代码实现时,通过不断将 n 除以 5 兵累加每次除后的n,得到答案。

解题代码:

class Solution {
    public int trailingZeroes(int n) {
        int count=0;
        while(n!=0){
            count+=n/5;
            n=n/5;
        }
        return count;
    }
}
 

总结:

        做题时,想到计算 5 的个数了,但遍历 5 的倍数,然后将被倍数循环除 5, 超时了。

        看官方题解做出来的。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值