刷演算法 LeetCode 階乘後的零

2021-09-11 12:11:45 字數 905 閱讀 6811

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

示例 1:

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

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

說明: 你演算法的時間複雜度應為 o(log n) 。

首先暴力破解法就是直接把最終的結果求出來然後看末尾有幾個0,但是這樣做的時間複雜度肯定是太大了。

然後考慮到末尾的0是怎麼形成的,首先10=2*5,20=2*2*5,30=3*2*5 ... 100=10*2*5

所以,問題的關鍵是看階乘裡面2和5的數量,但是因為顯然2出現的數量大於5出現的數量,拿5的階乘來舉例子:

5!= (1) * (2) * (3) * (2*2) * (5)

出現了3個2、1個5,但是末尾只有1個0,所以階乘末尾0的個數就是階乘式中5的個數。但是如解法1的**所示,時間複雜度還是太高。

繼續考慮,對於50!,我們可以寫成:

5 ... 2*5 ... 3*5 ... 4*5 ... 5*5 ... 6*5 ... 7*5 ... 8*5 ... 9*5 ... 10 * 5

可以看出來從5到10*5一共有10個5,但是對於10來說,從1到10還有2個5,所以50!的結果末尾有12個0

var trailingzeroes = function(n) 

} return count;

};複製**

上面這個解法的時間複雜度是n*(logn),不符合題意

var trailingzeroes = function(n) 

return count;

};

function divide(n, m)

複製**

LeetCode刷題 階乘後的零

給定乙個整數 n,返回 n 結果尾數中零的數量。示例 1 輸入 3 輸出 0 解釋 3 6,尾數中沒有零。示例 2 輸入 5 輸出 1 解釋 5 120,尾數中有 1 個零.說明 你演算法的時間複雜度應為 o log n 題解 這道題求解的是尾數中零的個數,根據乘法規則我們知道,2的倍數與5的倍數相...

LeetCode刷題之172 階乘後的零

我不知道將去向何方,但我已在路上!輸入 numbers 2,7,11,15 target 9 輸出 1,2 解釋 2 與 7 之和等於目標數 9 因此 index1 1,index2 2class solution def twosum self,numbers list int target in...

LeetCode 階乘後的零

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