Friday, July 24, 2015

Leetcode 172: trailing zeroes in factorial

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