Given a n integer n, return the number of trailing zeroes in n!.
Note: Your solution should be in logarithmic time complexity.
找n!的所有后缀0, 其实这个题目可以转化成找1-n有多少能整除2/5的数,最后2,5里面个数少的就是最后0的个数,但是一般2的个数都是比5多的,所以最后转化为找1-n有多少5, 如果1-n里面有25,125....这些数字,因为25里面有两个5, 比如4*25=100因为有两个5所以最后会出现2个0, 怎么解决这个问题? 可以先将数字n除以单个的5, 看有多少单个5, 再将n除以25, 看有多少extra的5,以此类推
这样做的算法timie complexity是多少呢? 因为每次都是以5位低来除,所以是O(logn) base 5.
class Solution {
public:
int trailingZeroe s(int n) {
int count = 0;
for (long int i = 5; n/i >= 1; i *= 5) {
count += n/i;
}
return count;
}
};
No comments:
Post a Comment