20170311-leetcode-Fractial Trailing Zeroes

来源:互联网 发布:splice软件安卓 编辑:程序博客网 时间:2024/05/21 07:15

1.Fractorial Trailing Zeroes

Given an integer n, return the number of trailing zeroes in n!.
Note: Your solution should be in logarithmic time complexity.
https://leetcode.com/problems/factorial-trailing-zeroes/?tab=Description
解读
求一个整数的阶乘尾部零的个数,夹杂在中间的不算,并且要求算法复杂度为O(log(N))

2.Solution

拿到这个题的时候,如果没有什么思路,可以先把阶乘打印出来找规律

1!=1    zeros:02!=2    zeros:03!=6    zeros:04!=24    zeros:05!=120    zeros:16!=720    zeros:17!=5040    zeros:18!=40320    zeros:19!=362880    zeros:110!=3628800    zeros:211!=39916800    zeros:212!=479001600    zeros:213!=6227020800    zeros:214!=87178291200    zeros:215!=1307674368000    zeros:316!=20922789888000    zeros:317!=355687428096000    zeros:318!=6402373705728000    zeros:319!=121645100408832000    zeros:320!=2432902008176640000    zeros:421!=51090942171709440000    zeros:422!=1124000727777607680000    zeros:423!=25852016738884976640000    zeros:424!=620448401733239439360000    zeros:425!=15511210043330985984000000    zeros:6

可以发现
前面24个数字都是n/5取整的结果,25增加了1,可以尝试输出一下50,75,100,125等数字,都会增加0的个数。
如果要出现0,则必须出现5,5与偶数结合就出现了0,5的个数决定了0的个数,而25,50,75,可以拆分成5X5,5X5X2,5X5X5,因此0的个数在原来的基础上在增加

class Solution(object):    def trailingZeroes(self, n):        cnt=0        while n>4:            cnt+=int(n/5)            n=int(n/5)        return cnt
0 0