题目来自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
成功
网友评论