每日刷題 階乘後的零

2021-09-06 08:47:00 字數 1169 閱讀 2105

示例 1:

輸入: 3

輸出: 0

解釋: 3! = 6, 尾數中沒有零。

示例 2:

輸入: 5

輸出: 1

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

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

感慨:今年408機組題目就是n!題目。。。。

解答:第一眼就可以排除是 將n!算出來再數0 之類的演算法。n!是很大的數字,對於乙個很小的n,計算機便已經無法儲存。

觀察原題,題目讓我們求階乘後尾數有乙個0,那麼什麼數字能造成尾數上有0呢? 2 * 1=2 , 3 * 4 =12 都沒有尾數都沒有0,而 5! = 120,尾數上便出現了0,因此當n>=5時,尾數上會出現0.可以類推,5! 有 1 個0, 10!便會有2個…當 n = 25時,由於 25 = 5 * 5,因此會額外地多出乙個0。。。同樣,依次推類。

**:產生了第乙個版本。

class solution 

return sum;

}// 當 n = 2147483647 超時。。

};

由於發生超時,開始優化演算法。 例如 n = 5 時就會有1個0,n = 10 時會有 兩個0,可以將 n/ 10 得到因子只含有乙個5時的0的個數。之後,再將 n / 25 (因為 25 = 5 * 5)得到因子含有兩個5時的0的個數。依次 n/125…

第二個版本如下:

class solution 

return sum;

}};// 當 n = 2147483647 依舊超時。。

//我比較鬱悶,已經降到o(logn)量級了,為什麼還是超時。

//難道pow費時間?

最終ac版本,思想與第二個版本一樣。

class solution 

return sum;}};

執行結果:

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 首先暴力破解法就是直接把最終的結果求出來然後看末尾有幾個0,但是這樣做的時間複...