您的位置:首页 > 大数据 > 人工智能

Leetcode 172. Factorial Trailing Zeroes

2017-02-08 03:50 316 查看
Given an integer n, return the number of trailing zeroes in n!.

Note: Your solution should be in logarithmic time complexity.

s思路:

1. n!中零的个数是因为有2,5这两个因子。我们就去找有多少个5,多少个2,然后这两个数的最小者决定了0的个数。严格的说,必须都计算,但是从得到结果的角度思考,由于5比2少,所以只需要知道有多少个5即可。

2. 比如:50!50/5就可以得到5的倍数的个数。第一次做的时候,就以为这就完了。其实没完,因为这两者不能直接划等号,比如:5的倍数是5,10,15,20,25,30,35,40,45,50.注意到,25和50各含有两个5.也就是说,5的倍数的个数不完全等于5的个数。换句话说,5的倍数的个数不严格等于5的个数,但是非常接近。现在的问题,就是如何修正?自己之前想到这里,就不知所措,除了stick这个方法就是quit这个方法,忘了还有一条路,就是继续使用这个方法往后走,比如:50/5=10,把10/5=2,2/5=0,就是一个iterative的过程。也就是说,这个结果不是一蹴而就就能得到,必须允许分步走。这道题的思路自然就出来!

3. 分步iterative走,经常是把一个方法多次运用,逐渐逼近事物真相!

class Solution {
public:
int trailingZeroes(int n) {
//
int res=0;
while(n){
n/=5;
res+=n;
}
return res;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  迭代