Leetcode Factorial Trailing Zeroes

原创 2015年07月09日 22:50:40

2015年7月9日
Leetcode:Factorial Trailing Zeroes
Given an integer n, return the num er of trailing zeroes in n!

Note: Your solution should be in logarithmic time complexity.

题目大意:
给一个n,求出n!末尾有几个0。

如果我没记错的话这是微软的一个笔试题目。

n!=12.....n
如果n!=K10M,K不能被10除尽,则末尾有M个0。分析什么情况下怎么会在末尾产生0:
由于10=25,取[1,n]的任意两个数a,b,这两个数相乘要产生0,a跟b的所有因子中至少有一个5和一个2,这样才能在末尾产生0。1个5跟1个2就会产生一个0,x个5跟x个2就会产生x个0。
所以综上所述:需要统计n!中的因子5的个数num1,因子2的个数num2,则答案就是:
min(num1,num2)

这样迈出了一大步了,不难看出n!中因子5的个数远远小于2的个数,所以只需统计因子5的个数了。
所以得到如下程序:

class Solution {
public:
    int trailingZeroes(int n) {
        long long cnt = 0;
        for(int i = 1; i <= n; ++i){
            int num = i;
            while(num % 5 == 0){
                cnt++;
                num /= 5;
            }
        }
        return cnt;    
    }
};

时间复杂度On,很明显这样是会超时的。
再来看看能否继续迈出一大步。
公式:

Z=[n/5]+[n/52]+[n/53]+.

[n/5]表示不大于n的数中5的倍数贡献一个5,[n/x]表示不大于n的数中x(x=5y)的倍数贡献[n/x]个5,所以可得到如下代码:

class Solution {
public:
    int trailingZeroes(int n) {
        long long cnt = 0;
        while(n){
            cnt += n / 5;
            n /= 5;
        }
        return cnt;
    }
};

时间复杂度Olog5n,Accepted。
转载请注明出处:blog.csdn.net/Royecode/article/details/46822913

版权声明:本文为博主原创文章,未经博主允许不得转载。

LeetCode(172) Factorial Trailing Zeroes

题目如下: Given an integer n, return the number of trailing zeroes in n!. Note: Your solution should be ...
  • feliciafay
  • feliciafay
  • 2015年01月02日 03:46
  • 6728

leetcode 172: Factorial Trailing Zeroes

Factorial Trailing Zeroes Total Accepted: 28 Total Submissions: 69 Given an integer n, return the...
  • xudli
  • xudli
  • 2014年12月30日 09:54
  • 9531

【LeetCode-面试算法经典-Java实现】【172-Factorial Trailing Zeroes(阶乘尾后0的数目)】

【172-Factorial Trailing Zeroes(阶乘尾后0的数目)】【LeetCode-面试算法经典-Java实现】【所有题目目录索引】代码下载【https://github.com/W...
  • DERRANTCM
  • DERRANTCM
  • 2015年08月23日 06:43
  • 2564

172. Factorial Trailing Zeroes [easy] (Python)

题目链接https://leetcode.com/problems/factorial-trailing-zeroes/题目原文 Given an integer n, return the nu...
  • coder_orz
  • coder_orz
  • 2016年06月05日 17:40
  • 1010

LeetCode Factorial Trailing Zeroes数学方法详解

Given an integer n, return the number of trailing zeroes in n!.题目的意思是要求一个整数的阶乘末尾有多少个0;1.需要注意的是后缀0是由2...
  • taoyanqi8932
  • taoyanqi8932
  • 2016年08月05日 15:14
  • 937

Leetcode: Factorial Trailing Zeroes

Given an integer n, return the number of trailing zeroes in n!. Note: Your solution should be in lo...
  • doc_sgl
  • doc_sgl
  • 2015年01月02日 21:23
  • 7122

Leetcode:172. Factorial Trailing Zeroes(JAVA)

【问题描述】 Given an integer n, return the number of trailing zeroes in n!. Note: Your solution s...
  • u010183658
  • u010183658
  • 2016年03月08日 11:14
  • 221

[LeetCode] Factorial Trailing Zeroes

Given an integer n, return the number of trailing zeroes in n!. Note: Your solution should be in ...
  • zjjee
  • zjjee
  • 2014年12月31日 15:25
  • 331

LeetCode -- Factorial Trailing Zeroes

LeetCode -- Factorial Trailing Zeroes
  • csharp25
  • csharp25
  • 2015年10月04日 16:19
  • 892

Factorial Trailing Zeroes -- leetcode

Given an integer n, return the number of trailing zeroes in n!. Note: Your solution should be in lo...
  • elton_xiao
  • elton_xiao
  • 2015年06月25日 15:50
  • 329
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Leetcode Factorial Trailing Zeroes
举报原因:
原因补充:

(最多只允许输入30个字)