1. 程式人生 > 實用技巧 >LeetCode階乘後的零Swift

LeetCode階乘後的零Swift

給定一個整數 n,返回 n! 結果尾數中零的數量。

示例 1:

輸入: 3
輸出: 0
解釋: 3! = 6, 尾數中沒有零。


示例2:

輸入: 5
輸出: 1
解釋: 5! = 120, 尾數中有 1 個零.


說明: 你演算法的時間複雜度應為O(logn)。

思路一:

先計算階乘總乘積,再除10計算0的個數,n為大數時,記憶體溢位,時間負責度也不是要求的O(logn)

思路二:

找規律

5!=5*4*3*2*1

10!=10*9*8*7*6*5*4*3*2*1

15!=15*14*13*12*11*10*9*8*7*6*5*4*3*2*1

20!=20*19*18*17*16*15*14*13*12*11*10*9*8*7*6*5*4*3*2*1

25!=25*24*23*22*21*20*19*18*17*16*15*14*13*12*11*10*9*8*7*6*5*4*3*2*1

題目求0的個數,因為10 = 5 * 2,就轉變了求 5 的個數。

5! 含5 5 共1個5

10! 含5 10 5 共2個5

15! 含5 15 10 5 共3個5

20!含5 2015 10 5 共4個5

25!含5 25(含2個5) 2015 10 5共6個5 每5個數含1個5 每25個數含1個25(多含1個5)

125!每5個數含1個5 每25個數含1個25(多含1個5)每125個數含1個125(又多含1個5)

class Solution {
    func trailingZeroes(_ n: Int) 
-> Int { var five = 0 var n = n while n >= 5 { n /= 5 five += n } return five } }