172.阶乘后的零
解题思路
package leadcode;
/**
* @author : icehill
* @description : 阶乘后的零
* 给定一个整数 n,返回 n! 结果尾数中零的数量。
* 简单题:
* 解题思路:
* 最优解:更偏向于数学题,主要是对问题的归纳总结。
* 规律就是每隔 5 个数,出现一个 5,
* 每隔 25 个数,出现 2 个 5,
* 每隔 125 个数,出现 3 个 5... 以此类推。
* 最终 5 的个数就是 n / 5 + n / 25 + n / 125 ...
* 写程序的话,如果直接按照上边的式子计算,分母可能会造成溢出。
* 所以算 n / 25 的时候,我们先把 n 更新,
* n = n / 5,然后再计算 n / 5 即可。后边的同理。
* 时间复杂度:O(logn) 空间复杂度O(1)
* @date : 2021-05-02
*/
public class Solution172 {
public static void main(String[] args) {
Solution172 solution172 = new Solution172();
System.out.println(solution172.trailingZeroes(20));
System.out.println(solution172.trailingZeroes(30));
}
public int trailingZeroes(int n) {
int count = 0;
while (n >= 5) {
//1~n中,每隔5个数出现一个5,所以这里n/5计算总共有多少个
//然后再算n/(5*5)=n/5/5,每次把n赋值为n/5
n = n / 5;
count += n;
}
return count;
}
}