Leetcode172. 阶乘后的零
题目:
给定一个整数 n,返回 n! 结果尾数中零的数量。
题解:
方案一:
计算N的阶乘(N!=12…*N)有多少个后缀0,即计算N!里有多少个10,也就是计算N!里有多少个2和5(数学原理:分解质因数),最后结果即2的个数和5的个数取较小值。
- 时间复杂度为O(NlogN)
方案二:
N!质因数里2的个数总是要比5的个数多,因此此题就变成了求解N!里有多少个质因数5
N!有多少个后缀0,即N!有多少个质因数5。
scala代码如下:
def trailingZeroes2(n: Int): Int = {
var count1 = 0
var count2 = 0
for (i <- 2 to n) {
var value = i
while (value % 2 == 0) {
count1 += 1
value = value / 2
}
while (value % 5 == 0) {
count2 += 1
value = value / 5
}
}
Math.min(count1, count2)
}
def trailingZeroes3(n: Int): Int = {
var count1 = 0
for (i <- 2 to n) {
var value = i
while (value % 5 == 0) {
count1 += 1
value = value / 5
}
}
count1
}