给定一个整数 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 {
/**
只有质因数含有5 或者 2的才有可能凑出10,所以只需统计[1, n]种所有数的2 或者 5的质因数个数的min即可, n 分解出5的个数为n / 5, 5肯定比2少,所以直接统计5即可 n / 5 + n / 5^2 + ...
*/
public int trailingZeroes(int n) {
return n == 0 ? 0 : n / 5 + trailingZeroes(n / 5);
}
}