算法每日一刷

LeetCode-172. 阶乘后的零(Swift)

2019-07-10  本文已影响0人  entre_los_dos

来源:力扣(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
    }
上一篇下一篇

猜你喜欢

热点阅读