Solution 1
这不是我能做出来的数学题。官方题解参考
整体解法就是,我们需要找到因子10的个数,由此需要找到因子2和因子5个数较小值,即5的个数。而这一过程可以归约到由1到n中每个数因子5的个数之和。
另外可以由更简便直观的优化方式实现,这里作为参考。
- 时间复杂度: O ( log n ) O(\log n) O(logn),其中 n n n为输入数字,在不断除5的过程中实现了对数复杂度
- 空间复杂度: O ( 1 ) O(1) O(1),仅维护常数个状态量
class Solution {
public:
int trailingZeroes(int n) {
int ans = 0;
while (n > 0) {
n /= 5;
ans += n;
}
return ans;
}
};
Solution 2
Solution 1的Python实现
class Solution:
def trailingZeroes(self, n: int) -> int:
ans = 0
while n > 0:
n //= 5
ans += n
return ans