题目
给定一个整数 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、…、n中因子分解包含5的个数相关,比如
1、2、3、4、5、...、10
能贡献因子5的只有 5、10,一个贡献2个5因子(5 = 5 * 1,10 = 2 * 5),故最终结果为2。
因此,
再对于1、…、n,只需要考虑5、10、15、…、5 * x,即
1 * 5、2 * 5、...、x * 5
上面数列都除于5(每个数都贡献1个5因子),一共贡献了 n / 5 = x个,数列变成了
1、2、...、x
变成了求解递归问题:
public int trailingZeroes(int n) {
if (n < 4) {
return 0;
}
int x = n / 5;
return x + trailingZeroes(x);
}
等价于:
class Solution {
public int trailingZeroes(int n) {
int sum = 0;
while (n > 0) {
n /= 5;
sum += n;
}
return sum;
}
}