LeetCode in Python 793. Preimage Size of Factorial Zeroes Function

Let f(x) be the number of zeroes at the end of x!. (Recall that x! = 1 * 2 * 3 * ... * x, and by convention, 0! = 1.)

For example, f(3) = 0 because 3! = 6 has no zeroes at the end, while f(11) = 2 because 11! = 39916800 has 2 zeroes at the end. Given K, find how many non-negative integers x have the property that f(x) = K.

Example 1:
Input: K = 0
Output: 5
Explanation: 0!, 1!, 2!, 3!, and 4! end with K = 0 zeroes.

Example 2:
Input: K = 5
Output: 0
Explanation: There is no x such that x! ends in K = 5 zeroes.
Note:

K will be an integer in the range [0, 10^9].

借助上一题的思路来做,显然阶乘的0的个数每隔5个数变化一次(0~4,5~9……),本题需要找到是否存在N,f(N)=K,如果存在则返回5,不存在返回0。根据数学推导N>=4K,从4K开始,每次递增5,直到f(N)>=K。

class Solution(object):
    def preimageSizeFZF(self, K):
        """
        :type K: int
        :rtype: int
        """
        # either 5 or 0    
        
        def getZeroes(n):
            return 0 if n < 5 else n/5 + getZeroes(n/5)

        start = 4*K
        zeroes = getZeroes(start)
        while zeroes < K:
            start += 5
            zeroes = getZeroes(start)
        
        return 5 if zeroes == K else 0

posted @ 2019-08-01 22:05  bossman  阅读(164)  评论(0编辑  收藏  举报