难度:medium
方法一:
统计阶乘的各项中有多少个5的倍数:
class Solution {
public int trailingZeroes(int n) {
// 即阶乘的各项中有多少个5的倍数
int count = 0;
for (int i = 5; i <= n; i++) {
for (int j = i; j % 5 == 0; j /= 5) {
count++;
}
}
return count;
}
}
复杂度分析:
- 时间复杂度:O(n^2)???应该是O(n)。n! 中因子 5 的个数为 O(n)
- 空间复杂度:O(1)
方法二:
牛逼法:
class Solution {
public int trailingZeroes(int n) {
int count = 0;
while (n > 0) {
n /= 5;
count += n;
}
return count;
}
}
复杂度分析:
- 时间复杂度:O(logn)
- 空间复杂度:O(1)