1. 程式人生 > >leetCode練習(172)

leetCode練習(172)

題目:Factorial Trailing Zeroes

難度:EASY

問題描述:

Given an integer n, return the number of trailing zeroes in n!.

Example 1:

Input: 3
Output: 0
Explanation: 3! = 6, no trailing zero.

Example 2:

Input: 5
Output: 1
Explanation: 5! = 120, one trailing zero.

求解思路:

問題是求階乘末尾0的個數。容易想到,每個2*5都是一個0,只要求出所有數的約數中2和5的個數,即可求得0的個數。其中,2的個數明顯總是大於5的個數,因此,問題變為了求階乘中每個5的個數。對於5、10、15,每個數中有1個5;而對於25,則是有兩個5,125則有3個5。

規律也是很明顯的:每隔5個數,就有一個5;每隔25,就有2個5,以此類推。這樣演算法也容易出來:

程式碼如下:共是兩個方法,方法1要將t設為long,因為t可能會越界。

public static int trailingZeroes(int n) {
        long t = 5;
        int res = 0;
        while(t<=n){
        	res += n/t;
        	t *= 5;
        }
        return res;
    }
public int trailingZeroes2(int n) {
        if(n>=5){
            return n/5 + trailingZeroes2(n/5);
        }
        else{
            return 0;
        }       
}