Python實現 階乘後的零 的一種方法

2021-08-27 23:38:28 字數 1298 閱讀 6122

給定乙個整數n,返回n!尾部0的個數

example 1:

input:3output:0explanation:3! = 6, no trailing zero.
example 2:

input:5output:1explanation:5! = 120, one trailing zero.
乙個更聰明的解法是:考慮n!的質數因子。字尾0總是由質因子2和質因子5相乘得來的。如果我們可以計數2和5的個數,問題就解決了。考慮下面的例子:

n = 5: 5!的質因子中 (2 * 2 * 2 * 3 * 5)包含乙個5和三個2。因而字尾0的個數是1。

n = 11: 11!的質因子中(2^8 * 3^4 * 5^2 * 7)包含兩個5和三個2。於是字尾0的個數就是2。

我們很容易觀察到質因子中2的個數總是大於等於5的個數。因此只要計數5的個數就可以了。那麼怎樣計算n!的質因子中所有5的個數呢?乙個簡單的方法是計算floor(n/5)。例如,7!有乙個5,10!有兩個5。除此之外,還有一件事情要考慮。諸如25,125之類的數字有不止乙個5。例如,如果我們考慮28!,我們得到乙個額外的5,並且0的總數變成了6。處理這個問題也很簡單,首先對n÷5,移除所有的單個5,然後÷25,移除額外的5,以此類推。

def trailingzeroes(self, n):

""":type n: int

:rtype: int

"""zerocount = 0

num = 5

while n >= num:

zerocount += n//num

num *= 5

return zerocount

def trailingzeroes(self, n):

""":type n: int

:rtype: int

"""zerocount = 0

sum = 1

for i in range(n):

sum = sum*(i+1)

while sum%10 == 0:

zerocount += 1

sum = sum//10

return zerocount

演算法題來自:

階乘後的零

示例 1 輸入 3 輸出 0 解釋 3 6,尾數中沒有零。示例 2 輸入 5 輸出 1 解釋 5 120,尾數中有 1 個零。說明 你演算法的時間複雜度應為 o log n 2.1 思路分析 當1個數乘以10的時候,它的末尾會多乙個零,而10只可分解為2 5,因此要確定乙個整數的末尾有多少零,需要知...

階乘後的零

給定乙個整數 n,返回 n 結果尾數中零的數量。示例 1 輸入 3 輸出 0 解釋 3 6,尾數中沒有零。示例 2 輸入 5 輸出 1 解釋 5 120,尾數中有 1 個零.說明 你演算法的時間複雜度應為 o log n 1.求尾數0的個數,即10,10只能由2 5組成,所以求因子中 2 和 5的個...

LeetCode 階乘後的零

一.題目描述 給定乙個整數 n,返回 n 結果尾數中零的數量。示例 1 輸入 3 輸出 0 解釋 3 6,尾數中沒有零。示例 2 輸入 5 輸出 1 解釋 5 120,尾數中有 1 個零.說明 你演算法的時間複雜度應為 o log n 二.解法 老實說,這道題,博主並沒有做出來,是抄的部落格大神的答...