【leetcode】Python实现-172.阶乘后的零

172.阶乘后的零

描述

给定一个整数 n,返回 n! 结果尾数中零的数量。

示例1

输入: 3
输出: 0
解释: 3! = 6, 尾数中没有零。

示例2

输入: 5
输出: 1
解释: 5! = 120, 尾数中有 1 个零.

说明: 你算法的时间复杂度应为 O(log n) 。
分析
我的思考过程是这样的:
1)如果将阶乘结果计算出来的话,求零可以采用能不能整出10的倍数来看,或者将结果转为字符串,利用str.count()求’0’的个数。
2)但是计算阶乘要不用递归要不用递推,运行时间都要很长,无法满足题目中的logn要求。
3)于是想到求0也就是求其中2*5的个数,也就是5的个数,因为每一个偶数都含2,只要有5肯定有2。然后我就遍历求能不能被5整除了。。。好蠢。。。还遍历
4)正确的做法是使用n除以5。。。具体的话上述链接分析得很好。

class Solution(object):
    def trailingZeroes(self, n):
        """
        :type n: int
        :rtype: int
        """
        r = 0
        while n >= 5:
            n = n // 5
            r+=n
        return r

你可能感兴趣的:(leetcode)