iT邦幫忙

2022 iThome 鐵人賽

DAY 17
0

題目說明:給一個整數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)

上一篇
Day 16 Power of Two
下一篇
Day 18 Palindrome Number
系列文
從leetcode學習資料結構和演算法31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言