【LeetCode 簡單題】40-階乘後的0
阿新 • • 發佈:2018-12-15
宣告:
今天是第40道題。給定一個整數 n,返回 n! 結果尾數中零的數量。以下所有程式碼經過樓主驗證都能在LeetCode上執行成功,程式碼也是借鑑別人的,在文末會附上參考的部落格連結,如果侵犯了博主的相關權益,請聯絡我刪除
(手動比心ღ( ´・ᴗ・` ))
正文
題目:給定一個整數 n,返回 n! 結果尾數中零的數量。
示例 1:
輸入: 3 輸出: 0 解釋: 3! = 6, 尾數中沒有零。示例 2:
輸入: 5 輸出: 1 解釋: 5! = 120, 尾數中有 1 個零.
說明: 你演算法的時間複雜度應為 O(log n)
解法1。注意題幹對時間複雜度的要求,迭代遞迴肯定不滿足,所以這道題需要巧解。這裡先給出其計算公式,推導過程祥見連結。其實有0就意味著有10,所以關係式可以寫成:有0-->有10-->有5*2-->有5(有5必有2,因為2比5小),小於5的階乘都沒有10-->…後面的沒看懂了囧
- 令f(x)表示正整數x末尾所含有的“0”的個數,則有:
- 當0 < n < 5時,f(n!) = 0;
- 當n >= 5時,f(n!) = k + f(k!), 其中 k = n / 5(取整)
- 計算舉例
- f(5!) = 1 + f(1!) = 1
- f(10!) = 2 + f(2!) = 2
- f(20!) = 4 + f(4!) = 4
- f(100!) = 20 + f(20!) = 20 + 4 + f(4!) = 24
- f(1000!) = 200 + f(200!) = 200 + 40 + f(40!) = 240 + 8 + f(8!) = 248 + 1 + f(1) =249
class Solution(object):
def trailingZeroes(self, n):
"""
:type n: int
:rtype: int
"""
result = 0
while n>=5:
n = int(n/5)
result += n
return result