172. Factorial Trailing Zeroes

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.

Note: Your solution should be in logarithmic time complexity.

来自 <https://leetcode.com/problems/factorial-trailing-zeroes/description/>

 

思路1:耿直的想法,把阶乘算出来,然后计算末尾有多少个0 

 1 class Solution(object):
 2     def trailingZeroes(self, n):
 3         """
 4         :type n: int
 5         :rtype: int
 6         """
 7         num = 1
 8         for i in range(1, n + 1):
 9             num = num * i
10         num = str(num)[::-1]
11         count = 0
12         for i in num:
13             if i == '0':
14                 count += 1
15             else:
16                 break
17         return count

思路2:问题的关键在于2和5的出现次数,因为只有2*5才能组成10,但2的出现概率是高于5的,所以只要计算5的出现次数就行了,如5!包含1个5,10!包含5和10这两个,25!包含5,10,15,10,25,其中25又可以分成5*5也就是6个。所以问题可以转换为求解包含5,5*5,5*5*5的个数

 1 class Solution(object):
 2     def trailingZeroes(self, n):
 3         """
 4         :type n: int
 5         :rtype: int
 6         """
 7         count = 0
 8         while (n > 0):
 9             count += n // 5
10             n = n / 5
11         return int(count)