leetCode練習(172)
阿新 • • 發佈:2019-01-27
題目: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; } }