边工作边刷题: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