leetcode刷題--Factorial Trailing Zeroes

黃思喆發表於2015-05-18

題目:求一個整數階乘後數字字尾中0的個數。要求解法滿足多項式時間複雜度。

最容易想到的是先求階乘再處理字尾,有程式碼:

class Solution:
    # @param {integer} n
    # @return {integer}
    def trailingZeroes(self, n):
        result=1
        i=0
        while(i<n):
            result*=(n-i)
            i+=1
        for i in [str(j) for j in range(1,10)]:
            return  min([str(result).rfind(i) for i in [str(j) for j in range(1,10)]])-1

然而不能通過,因為時間上不滿足要求

那想辦法解決,容易想到,10=2*5,所以如果得出n的階乘由幾對2*5得到即可,我們判斷小於n的數中有幾對2*5,但容易發現。。。5總是比2少,因此只找含5的即可。也就是說找到小於n的5的冪即可。

程式碼:

class Solution: # @param {integer} n # @return {integer} def trailingZeroes(self, n): x = 5 result = 0 while n >= x: result += int(n / x) x *= 5 return result

相關文章