LeetCode:求阶乘后面的0的个数(Factorial Trailing Zeroes)

题目:

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

Note: Your solution should be in logarithmic time complexity.

思路:

只有2和5相乘才会出现0,其中整十也可以看做是2和5相乘的结果,所以,可以在n之前看看有多少个2以及多少个5就行了。

    Tips1——可以发现2的数量一定多于5的个数,于是我们只看n前面有多少个5就行了。于是n/5就得到了5的个数。

    Tips2——注意的就是25,由于是5*5,所以也要考虑出现的另外一个五。同理,还要看看n里面有多少个5^3, 5^4, 5^5....。因此需递归地要加上n/5中的5的个数。

代码(Python):时间 O(logn), 空间 O(1)

class Solution(object):
    def trailingZeroes(self, n):
        """
        :type n: int
        :rtype: int
        """
        if n == 0 or n < 5: return 0;
        count = 0
        i = 0
        while(n):
            count += n/5
            n /= 5
        return count
极简代码:
class Solution(object):
    def trailingZeroes(self, n):
        return 0 if n < 5 else (n / 5 + self.trailingZeroes(n /5))

注意:

成员函数递归,需要用self调用自身;

python的三元运算符是:x if  condition else y.

发布了392 篇原创文章 · 获赞 492 · 访问量 241万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览