来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/factorial-trailing-zeroes
题目
给定一个整数 n,返回 n! 结果尾数中零的数量。
示例 1:
输入: 3
输出: 0
解释: 3! = 6, 尾数中没有零。
示例 2:
输入: 5
输出: 1
解释: 5! = 120, 尾数中有 1 个零.
说明: 你算法的时间复杂度应为 O(log n) 。
n! = n(n-1)(n-2)直到*1为止。计算结果中,尾数是0的个数。比如1020。尾数有1个零。
试验1--先计算结果,再遍历求值。。。
func trailingZeroes(_ n: Int) -> Int {
var zeroNum = 0
var currentN = n
var result = 1
//先算出最后结果
while currentN > 1 {
result *= currentN;
currentN -= 1
}
//查找0的个数(略)
}
不可取,结果过大时,程序会溢出。
方法2-算有多少个5
func trailingZeroes(_ n: Int) -> Int {
var zeroNum = 0
var currentN = n
//什么时候会出现0。10以内的举例2*5,4*5,6*5,8*5,10*5。
//所以可以看出规律,都跟5有关,凑成2*5就能出来1个0。
//由于2很多,那么我们可以理解成算总共有多少个5.要注意25这种,有两个5,所以会出来2个0.
while currentN >= 5 {
zeroNum += currentN / 5
currentN = currentN / 5
}
return zeroNum
}
网友评论