給定乙個整數 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 二.解法 老實說,這道題,博主並沒有做出來,是抄的部落格大神的答...