LC 793. 阶乘函数后 K 个零 (opens new window) (opens new window)
困难
# 问题描述
f(x)
是 x!
末尾是 0 的数量。回想一下 x! = 1 * 2 * 3 * ... * x
,且 0! = 1
。
- 例如,
f(3) = 0
,因为3! = 6
的末尾没有 0 ;而f(11) = 2
,因为 11! = 39916800
末端有 2 个 0 。
给定 k
,找出返回能满足 f(x) = k
的非负整数 x
的数量。
示例 1:
输入:k = 0
输出:5
解释:0!, 1!, 2!, 3!, 和 4! 均符合 k = 0 的条件。
示例 2:
输入:k = 5
输出:0
解释:没有匹配到这样的 x!,符合 k = 5 的条件。
示例 3:
输入: k = 3
输出: 5
提示:
0 <= k <= 109
# 数学
在进制中,只有和相乘才会得到,就是在阶乘过程中,一对和会在末尾产生一个,因为因子的个数总比因子多,因此,阶乘末尾的个数等价于因子的个数。 由于 、这样的数能够拆解成多个因子,按这些特殊的数划分成不同的档次,找出刚好大于等于 的档次,然后循环往下降档,看是否满足某个档次边界减一,若满足,则说明阶乘不可能满足该条件,返回
/**
* @param {number} k
* @return {number}
*/
var preimageSizeFZF = function (k) {
let max = 1
while (max < k) {
max = max * 5 + 1
}
while (max > 1) {
if (max - 1 === k) return 0
max = (max - 1) / 5
k %= max
}
return 5
}
- 时间复杂度:
- 空间复杂度:
上次更新: 2023/01/31 19:48:05
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 , 转载请注明出处!