2.
描述
设计一个算法,计算出n阶乘中尾部零的个数
您在真实的面试中是否遇到过这个题?
是
样例
11! = 39916800,因此应该返回 2
挑战
O(logN)的时间复杂度
1347.
描述
给定一个整数n
,返回n!
(n的阶乘)的尾随零的个数。
您的解法时间复杂度应为对数级别。
您在真实的面试中是否遇到过这个题?
首先考虑尾部产生0的原因,每当遇到含有因子5和2的时候就会产生,所以只需要考虑出现因子5的次数,1*5 2*5 3*5 4*5 5*5......5*5*5....5*5*5*5... 所以阶乘数不停的除5得到这一轮5的因子数目。
要想得到O(logn)的时间复杂度,需要每次循环对比上次数目减少。
class Solution {
public:
/*
* @param n: A long integer
* @return: An integer, denote the number of trailing zeros in n!
*/
long long trailingZeros(long long n) {
// write your code here, try to do it without arithmetic operators.
long count = 0;
long temp=n/5;
while (temp!=0) {
count+=temp;
temp/=5;
}
return count;
}
};