美文网首页
172. Factorial Trailing Zeroes

172. Factorial Trailing Zeroes

作者: 金发萌音 | 来源:发表于2015-05-02 23:46 被阅读203次

    题目来自leetcode

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

    Note: Your solution should be in logarithmic time complexity.

    在logn的时间内 找到n!末尾有几个零

    首先,要清楚 n!末尾有几个零是由这个数字的质因子中有几个成对的2 和5 决定的。我们又知道n! = n(n-1)(n-2)...... 1 ,不难看出随着n的增大,n!中质因子2要比5多的多!

    那么我们可以计算n的数量,这个数量就是末尾0的值!

            counter = 0
            while n > 0:
            temp = n
                while temp % 5 == 0:
                    counter =  counter + 1
                    temp = temp / 5
                n = n - 1
    

    上面的算法就可以得到,但是很明显超时

    while循环中有很多不能被2 5 整除的数
    逐渐发现到
    存在这样的规律:[n/k]代表1~n中能被k整除的个数。

    然后,代码就可以

    #coding = utf-8
    
    class Solution:
        # @return an integer
        def trailingZeroes(self, n):
            counter = 0
            if n == 0:
                return 0
    
            # while n > 0:
            # temp = n
            #     while temp % 5 == 0:
            #         counter =  counter + 1
            #         temp = temp / 5
            #     n = n - 1
    
            # return counter
    
            while n != 0:
                counter += n/5;
                n /= 5;
            return counter
    

    成功

    相关文章

      网友评论

          本文标题:172. Factorial Trailing Zeroes

          本文链接:https://www.haomeiwen.com/subject/deibfttx.html