一、题目
设计一个算法,算出 n 阶乘有多少个尾随零。
示例 1:
输入: 3
输出: 0
解释: 3! = 6, 尾数中没有零。
示例 2:
输入: 5
输出: 1
解释: 5! = 120, 尾数中有 1 个零.
说明: 你算法的时间复杂度应为 O(log n)
。
二、C# 题解
每隔 5 个数就会出现一个 5,每隔 25 个数会出现 一个 25, 每隔 125 个数会出现一个 125…
n ! = 1 × 2 × 3 × 4 × ( 1 × 5 ) × ⋯ × ( 2 × 5 ) × ⋯ × ( 3 × 5 ) … n! = 1 \times 2 \times 3 \times 4 \times (1 \times 5) \times \dots \times (2 \times 5) \times \dots \times (3 \times 5) \dots n!=1×2×3×4×(1×5)×⋯×(2×5)×⋯×(3×5)…
因此只需要计算 ans = n / 5 + n / 25 + n / 125 + …
public class Solution {
public int TrailingZeroes(int n) {
if (n == 0) return 0;
return n / 5 + TrailingZeroes(n / 5);
}
}
- 时间:20 ms,击败 100.00% 使用 C# 的用户
- 内存:25.37 MB,击败 100.00% 使用 C# 的用户
也可以不使用递归求解:
public class Solution {
public int TrailingZeroes(int n) {
int ans = 0;
while (n != 0) {
n /= 5;
ans += n;
}
return ans;
}
}