Description
Given an integer n, return the number of trailing zeroes in n!.
Note that n! = n * (n - 1) * (n - 2) * ... * 3 * 2 * 1.
Example 1:
Input: n = 3
Output: 0
Explanation: 3! = 6, no trailing zero.
Example 2:
Input: n = 5
Output: 1
Explanation: 5! = 120, one trailing zero.
Example 3:
Input: n = 0
Output: 0
Constraints:
0 <= n <= 10^4
Follow up: Could you write a solution that works in logarithmic time complexity?
Solution
Didn’t know how to solve until I saw the solution…
For the trailing zeroes, 2x5
makes a trailing zero. Since 2
appears more frequently than 5
, the trailing zeroes depend solely on the number of 5
that appears in the factorial of n
. For numbers like 25
, it contains two 5s, so actually we need to find the number of multiple of 5, that is: 5, 5x5, 5x5x5, 5x5x5x5, …
Time complexity:
o
(
log
n
)
o(\log n)
o(logn), note the log is based on 5.
Space complexity:
o
(
1
)
o(1)
o(1)
Code
class Solution:
def trailingZeroes(self, n: int) -> int:
return 0 if n == 0 else n // 5 + self.trailingZeroes(n // 5)