172 Factorial Trailing Zeroes

class Solution(object):
    def trailingZeroes(self, n):
        """
        :type n: int
        :rtype: int
        """

        return 0  if n / 5 == 0 else n /5 + self.trailingZeroes(n / 5);

http://www.jianshu.com/p/211618afc695


思路如下:

这里我们要求n!末尾有多少个0,因为我们知道025相乘得到的,而在1n这个范围内,2的个数要远多于5的个数,所以这里只需计算从1n这个范围内有多少个5就可以了。

思路已经清楚,下面就是一些具体细节,这个细节还是很重要的。

我在最开始的时候就想错了,直接返回了n / 5,但是看到题目中有要求需要用O(logn)的时间复杂度,就能够想到应该没这么简单。举连个例子:

例1

n=15。那么在15! 中 有35(来自其中的51015), 所以计算n/5就可以。

例2

n=25。与例1相同,计算n/5,可以得到55,分别来自其中的5, 10, 15, 20, 25,但是在25中其实是包含25的,这一点需要注意。

所以除了计算n/5, 还要计算n/5/5, n/5/5/5, n/5/5/5/5, ..., n/5/5/5,,,/5直到商为0,然后就和,就是最后的结果。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值