阶乘函数后K个零(首个困难题)
目录
阶乘函数后K个零(首个困难题)
题目:
https://leetcode-cn.com/problems/preimage-size-of-factorial-zeroes-function/
思路:
首先先写个判断阶乘后有多少个零的函数,思路就是找所有相乘的数中因数有5的个数。
然后再用二分查找,找到有K个0的左界和右界,然后相减即可,就是要找的数目
class Solution:
def preimageSizeFZF(self, K: int) -> int:
return self.findright(K) - self.findleft(K)
def whatzero(self,n):
= 5
dis = 0
res while dis <= n:
+= n // dis
res *= 5
dis return res
def findleft(self,K):
= 0,sys.maxsize
mins,maxs while (mins < maxs):
= mins + (maxs-mins) // 2
mid if self.whatzero(mid) < K:
= mid + 1
mins elif self.whatzero(mid) > K:
= mid
maxs else:
= mid
maxs return mins
def findright(self,K):
= 0,sys.maxsize
mins,maxs while (mins < maxs):
= mins + (maxs-mins) // 2
mid if self.whatzero(mid) < K:
= mid + 1
mins elif self.whatzero(mid) > K:
= mid
maxs else:
= mid + 1
mins return maxs
注意这里的最大值要初始化为sys库里的maxsize 用float(“inf”)会返回nan值