豆包 LeetCode 793.阶乘函数后K个零 public int preimageSizeFZF(int k)
我直接给你 LeetCode 793. Preimage Size of Factorial Zeroes Function 的 Java 标准 AC 代码 + 极简思路,一步到位。2. 写一个函数count(x)计算x!给定k ,问有多少个x满足f(x) = k。1. 末尾 0 的个数 = 质因子 5 的个数(远多于 2)4. 再找 最小的 x 使得 count(x) == k+1。3. 二分找
·
我直接给你 LeetCode 793. Preimage Size of Factorial Zeroes Function 的 Java 标准 AC 代码 + 极简思路,一步到位。
题目大意
函数 f(x) 是 x! 末尾 0 的个数。
给定 k ,问有多少个 x 满足 f(x) = k 。
答案只会是 0 或 5。
思路
1. 末尾 0 的个数 = 质因子 5 的个数(远多于 2)
2. 写一个函数 count(x) 计算 x! 有多少个 0
3. 二分找 最小的 x 使得 count(x) == k
4. 再找 最小的 x 使得 count(x) == k+1
5. 两个 x 之差就是答案(一定是 0 或 5)
Java AC 代码
java
class Solution {
public int preimageSizeFZF(int k) {
long left = findK(k);
long right = findK(k + 1);
return (int) (right - left);
}
// 找最小的 x 使得 count(x) >= t
private long findK(int t) {
long l = 0, r = (long) 1e18;
while (l < r) {
long mid = l + (r - l) / 2;
if (count(mid) >= t) {
r = mid;
} else {
l = mid + 1;
}
}
return l;
}
// 计算 x! 末尾 0 的个数
private long count(long x) {
long res = 0;
while (x > 0) {
x /= 5;
res += x;
}
return res;
}
}
关键点
- count(x) 是严格不减函数
- 每 5 个数一组,0 的个数要么不变,要么**+1**
- 所以满足 f(x)=k 的 x 要么 0 个,要么 5 个
如果你愿意,我可以再给你:
- 逐行注释版
- 手算模拟过程
- C++ / Python 版本
你要哪个?
更多推荐




所有评论(0)