题目链接:https://leetcode.com/problems/factorial-trailing-zeroes/
Given an integer n, return the number of trailing zeroes in n!.
Example 1:
Input: 3 Output: 0 Explanation: 3! = 6, no trailing zero.
Example 2:
Input: 5 Output: 1 Explanation: 5! = 120, one trailing zero.
Note: Your solution should be in logarithmic time complexity.
思路:
一般遇到这种题就是要找规律的
5!=5*4*3*2*1;有一个5的倍数,两个2的倍数。1个0.
10!=10*...*8*...6 * 5*4*...*2*1;2个0;
15!=.15*.....*1;3个0;
20!=.20*....*1;4个0;
25!=25*...*1;6个0,这里出现了不符合预期的情况,
原因是在[25,20)中25可以分解为两个5,结合数量永远比5因子多的因子2,所以在这部分区间多了两个0;
所以规律就找到了(由于2作为因子的次数永远比5作为因子次数多),[5m,5(m-1))区间至少产生一个0。
若m还可以被5整除,循环计算即可。
AC:
class Solution {
public int trailingZeroes(int n) {
int count=0;
while(n!=0){
count=count+n/5;
n=n/5;
}
return count;
}
}