题目概述
给定一个整数 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 <= 10^4
进阶:你可以设计并实现对数时间复杂度的算法来解决此问题吗?
题目来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/factorial-trailing-zeroes
解题分析:
方法:数学
求尾随零的数量,就相当于求能组合成 10 的组合的数量,能组合成 10 的组合只有 5 的倍数和 2 的倍数,而 2 的倍数一定比 5 的倍数多,所以我们只需要求 5 的倍数个数就能得到 10 的组合个数,而 5 的倍数个数直接用 n / 5 就可以得到。值得注意的是,像 25,125 这种情况,相当于有多个 5 存在,我们需要再对这些情况进行计算。
时间复杂度:O(log n)
空间复杂度:O(1)
class Solution {
public int trailingZeroes(int n) {
//记录结果
int res = 0;
//遍历
for(int i = 5; i <= n; i *= 5){
res += n / i;
}
return res;
}
}