原文题目:
172. Factorial Trailing Zeroes
读题:
求n!的末尾有多少个0。说实话,第一次看到这个题,有点懵,由于需要在O(logn)的复杂度内,当然不能去把n!计算出来,然后仔细想想,末尾0是哪里来的?只有当2*5时才会产生一个0,而在1-n中,2的个数明显要多于5的个数,因为2,4,6,8都含有2,所以只要找到5的个数就行了,但是同样的,比如25是包含5*5两个5的,同样的5^3,5^4也一样,所以还需要判断n/5之后没有没5,一直除以5一直到值为0为止。
采用递归方法,一行代码就搞定了
class Solution { public: int trailingZeroes(int n) { return n == 0 ? 0 : n / 5 + trailingZeroes(n / 5); } };