给定一个整数 n,返回 n! 结果尾数中零的数量。
示例 1:
输入: 3
输出: 0
解释: 3! = 6, 尾数中没有零。
示例 2:
输入: 5
输出: 1
解释: 5! = 120, 尾数中有 1 个零.
说明: 你算法的时间复杂度应为 O(log n) 。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/factorial-trailing-zeroes
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路:
阶乘的结果中的0,只可能有两种来源:
1. 2 * 5 得到的0
2. 从类似10这种末尾自带0的数继承来的0
对于第一种来源,0的个数取决于min(2, 5),比如如果有3个2和2个5,那么只能得到2个0;又因为5比2大,所以如果有5,一定有2,因此0的个数仅取决于5的个数。
而对于第二种来源, 10 = 2 * 5,结尾有一个0, 100 = 2 * 5 *5,结尾有两个0,观察一下可以发现,实际上末尾的0也取决于因数分解里5的个数,因此0的个数仅取决于5的个数。
因此,统计n的因数里5的个数就可以知道n!的末尾有几个0。
class Solution(object):
def trailingZeroes(self, n):
"""
:type n: int
:rtype: int
"""
res = 0
while n > 4:
res += n //5
n //= 5
return res