Leetcode笔记 每日一题 172. 阶乘后的零 (22.03.25)
Leetcode 每日一题 172. 阶乘后的零 (22.03.25)
题目
给定一个整数 n ,返回 n! 结果中尾随零的数量。
提示
n! = n * (n - 1) * (n - 2) * … * 3 * 2 * 1
示例一:
输入:n = 3
输出:0
解释:3! = 6 ,不含尾随 0
示例二:
输入:n = 5
输出:1
解释:5! = 120 ,有一个尾随 0
示例三:
输入:n = 0
输出:0
提示:
- 0 <= n <= 104
解题思路
关于题目中求阶乘后结果中尾随0的个数,可以理解为阶乘后是10的多少倍,即有多少个0,而10可以分解成
2*5
来计算,比如:
- 当n = 5时,
5! = 5*4*3*2*1 = 120
5!尾随0的个数为1个,从中我们可以发现2*5
的个数为1个 ,数字5的个数为1个,n // 5 = 1
- 当n = 10时
10! = 10*9*8*7*6*5*4*3*2*1 = (2*5)*9*(2*4)*7*(2*3)*(2*5)*(2*2)*3*1= 3628800
10!尾随0的个数为2个,2*5
的个数为2个,数字5的个数为2个,n // 5 = 2
- 由此我假设 n!尾随0的个数可能与
n // 5
有关
验证一下: 当n = 20时20!= 2432902008176640000
20! 尾随0的个数为4个n // 5 = 4
由此得出 n!尾随0的个数与
n // 5
有关
Python代码
class Solution:
def trailingZeroes(self, n: int) -> int:
zeros = 0
while n > 0 :
n //= 5
zeros += n
return zeros
专业解释参考
class Solution:
def trailingZeroes(self, n: int) -> int:
return n // 5 + self.trailingZeroes(n // 5) if n else 0