題目說明:給一個整數n,要你求出n階乘的結果尾端有幾個0
Case 1
Input: n = 3
Output: 0
Explanation: 3! = 6, no trailing zero.
Case 2
Input: n = 5
Output: 1
Explanation: 5! = 120, one trailing zero.
Case 3
Input: n = 0
Output: 0
解題思路:要判斷尾端的0,我們可以知道可以由5的倍數乘上2的倍數就會有一個0,重點是有幾個5的倍數,因為2的倍數每兩個就會出現,所以數量一定比5的倍數多,因此只需要考量5的倍數即可。比較麻煩的是當遇到5的冪次方的倍數時(如25,50,75)時的判斷機制。先透過列個幾點來得到進行推導
n的範圍 | trailing zeroes |
---|---|
n<5 | 0 |
5<=n<10 | 1 |
10<=n<15 | 2 |
15<=n<20 | 3 |
20<=n<25 | 4 |
25<=n<30 | 6 |
30<=n<35 | 7 |
35<=n<40 | 8 |
40<=n<45 | 9 |
45<=n<50 | 10 |
50<=n<55 | 12 |
我們可以寫成以下的遞迴式子
f(n)=0, if n<5
f(n)=n/5+f(n/5), if n>5
有了遞迴式子之後,要寫程式就輕鬆多了
附上程式碼
Java
class Solution {
public int trailingZeroes(int n) {
if(n<5){
return 0;
}
return n/5+trailingZeroes(n/5);
}
}
Python
class Solution:
def trailingZeroes(self, n: int) -> int:
if n<5:
return 0
else:
return n//5+self.trailingZeroes(n//5)