172. Factorial Trailing Zeroes
题目大意
Given an integer n
, return the number of trailing zeroes in n!
.
Note that n! = n * (n - 1) * (n - 2) * ... * 3 * 2 * 1
.
中文释义
给定一个整数 n
,返回 n!
(n
的阶乘)的尾随零的个数。
注意 n! = n * (n - 1) * (n - 2) * ... * 3 * 2 * 1
。
示例
示例 1:
输入: n
= 3
输出: 0
解释: 3! = 6,没有尾随零。
示例 2:
输入: n
= 5
输出: 1
解释: 5! = 120,有一个尾随零。
示例 3:
输入: n
= 0
输出: 0
限制条件
0 <= n <= 10^4
进阶
你能写出一个在对数时间复杂度内工作的解决方案吗?
解题思路
方法
该方法计算了阶乘数中因子 5 的个数,以此来确定尾随零的数量。
-
初始化计数器:
- 初始化一个计数器
five_count
来记录因子 5 的个数。
- 初始化一个计数器
-
循环除以 5:
- 当
n
大于或等于 5 时,循环继续。 - 在每次迭代中,将
n
除以 5 并将商加到five_count
上。 - 更新
n
为n
除以 5 的商。
- 当
-
返回尾随零的个数:
- 返回
five_count
作为尾随零的个数。
- 返回
代码
class Solution {
public:
int trailingZeroes(int n) {
int five_count = 0;
while (n >= 5) {
five_count += n/5;
n /= 5;
}
return five_count;
}
};