要求
给定一个整数 n ,返回 n! 结果中尾随零的数量。
提示 n! = n * (n - 1) * (n - 2) * ... * 3 * 2 * 1
示例 1:
输入:n = 3
输出:0
解释:3! = 6 ,不含尾随 0
示例 2:
输入:n = 5
输出:1
解释:5! = 120 ,有一个尾随 0
示例 3:
输入:n = 0
输出:0
提示:
- 0 <= n <= 104
核心代码
class Solution:
def trailingZeroes(self, n: int) -> int:
count = 0
while n >= 5:
n = n // 5
count += n
return count
解题思路:要点:5的个数
由于10=2*5,而阶乘中5总是比2多(只要有5一定有2,所以只看5的个数就行)
如果遍历n,n-1,n-2.....1来对每个算5的个数当int太大会超时。
这里用巧妙的整除法,因为每隔5个数字会有一个5,每隔25个数字会有两个5,每隔125个数字会有三个5,例如26!我们可以这么算:26/5=5,26/25=1,所以答案为5+1=6,其中第一次26/5=5取了5,10,15,20,25中的5,26/25=1取了25中的另一个5。