Leetcode 172. Factorial Trailing Zeroes

本文介绍了一种高效计算n!尾部零的数量的方法。利用迭代过程分解问题,通过不断除以5并累加结果来精确计算尾部零的数量。这种方法的时间复杂度为对数级别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Given an integer n, return the number of trailing zeroes in n!.

Note: Your solution should be in logarithmic time complexity.

s思路:
1. n!中零的个数是因为有2,5这两个因子。我们就去找有多少个5,多少个2,然后这两个数的最小者决定了0的个数。严格的说,必须都计算,但是从得到结果的角度思考,由于5比2少,所以只需要知道有多少个5即可。
2. 比如:50!50/5就可以得到5的倍数的个数。第一次做的时候,就以为这就完了。其实没完,因为这两者不能直接划等号,比如:5的倍数是5,10,15,20,25,30,35,40,45,50.注意到,25和50各含有两个5.也就是说,5的倍数的个数不完全等于5的个数。换句话说,5的倍数的个数不严格等于5的个数,但是非常接近。现在的问题,就是如何修正?自己之前想到这里,就不知所措,除了stick这个方法就是quit这个方法,忘了还有一条路,就是继续使用这个方法往后走,比如:50/5=10,把10/5=2,2/5=0,就是一个iterative的过程。也就是说,这个结果不是一蹴而就就能得到,必须允许分步走。这道题的思路自然就出来!
3. 分步iterative走,经常是把一个方法多次运用,逐渐逼近事物真相!

class Solution {
public:
    int trailingZeroes(int n) {
        //
        int res=0;
        while(n){
            n/=5;
            res+=n;
        }
        return res;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值