切換
舊版
前往
大廳
主題

LeetCode - 172. Factorial Trailing Zeroes 解題心得

Not In My Back Yard | 2020-09-02 00:00:22 | 巴幣 0 | 人氣 214

題目連結:


題目意譯:
給定一整數 n,回傳 n! 末尾的 0 之數量。

注:你的解答應為對數時間複雜度。



範例測資:
範例 1:
輸入: 3
輸出: 0
解釋: 3! = 6 , 沒有末尾的 0 。

範例 2:
輸入: 5
輸出: 1
解釋: 5! = 120 , 有一個末尾 0 。


解題思維:
可以看到每個 0 的出現,同時代表著 n! 裡有著一個 10 的乘積。

而因為 10 = 2 × 5 且 2 < 5 ,因此在 n! 中,是 2 的倍數的數字肯定比 5 的倍數的數字來得多。

因此只要看 n! 中有多少個「5」,就可以知道有多少個「10」,即是「0」的數量。

而「5」在乘積中的次方可由下求出:
先計算 floor(n ÷ 5) 的值,代表 5 的倍數有多少個。這些數字各自貢獻一個「5」的次方。
再計算 floor(n ÷ 25) 的值,代表 25 的倍數有多少個。這些數字除了像 5 的倍數貢獻一個次方以外,還會再貢獻另一個次方。
再來計算 floor(n ÷ 125) 的值,代表 125 的倍數有多少個。這些數字除了像 25 的倍數貢獻兩個次方以外,還會再貢獻另一個次方。
……
以此類推。其中 floor 函式代表下高斯函數,對於非負整數來說等同無條件捨去小數點。




此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

更多創作