边工作边刷题:70天一遍leetcode: day 5

Factorial Trailing Zeroes

要点:这题heuristic很容易想,就是所有可被5整除的数都会贡献一个尾0。但是每次实现都会错想成+5循环,这样time complexity就是O(n)了,而要求的是O(lgn)。实际上应该是检查n有多少5整除数:这个数量可以一步计算出来,而累加到count上。到下一轮,就变成可被25整除的数了。因为25=5X5也可以被5整除,贡献了一个0在上一轮计算过,而这一轮是另一个因子中的5的贡献。之后依次类推,直到被除数超过n了。

class Solution(object):
    def trailingZeroes(self, n):
        """
        :type n: int
        :rtype: int
        """
        count = 0
        factor = 5
        while n/factor>0:
            count+=n/factor
            factor*=5
        return count
            
posted @ 2016-05-20 07:23  absolute100  阅读(104)  评论(0编辑  收藏  举报