博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
leetcode刷题172 阶乘后的零 Factorial Trailing Zeroes(简单) Python Java
阅读量:4129 次
发布时间:2019-05-25

本文共 950 字,大约阅读时间需要 3 分钟。

题目描述:

给定一个整数 n,返回 n! 结果尾数中零的数量。

示例 1:

输入: 3

输出: 0
解释: 3! = 6, 尾数中没有零。

示例 2:

输入: 5

输出: 1
解释: 5! = 120, 尾数中有 1 个零.

说明: 你算法的时间复杂度应为 O(log n) 。

解题思路:

找阶乘得数里面有多少个5,因为每次只有5和2相遇时才会产生一个10,也就是会有一个“零”

不断除以 5, 是因为每间隔 5 个数有一个数可以被 5 整除, 然后在这些可被 5 整除的数中, 每间隔 5 个数又有一个可以被 25 整除, 故要再除一次, … 直到结果为 0, 表示没有能继续被 5 整除的数了.

class Solution(object):    def trailingZeroes(self, n):        i = 0        while n >= 5:            n = n//5            i += n        return i

以下是Java版本:

解题思路:

假如i可以被5整除,则可以提供的5的个数为i/5个 

      假如i可以被25整除,则可以多提供的5的个数为i/25个 
      假如i可以被125整除,则可以多提供的5的个数为i/125个(算上了被5,25整除之后)

……

首先想到用组合数学的方法来算,n!中0的个数主要看的是1-n 各数的因数中2和5的次数,有多少对(2, 5),结果中就有多少个0,而分解的结果中,2的个数显然是多于5的,因此,有多少个5,就有多少个(2, 5)对。

public class Solution {      // 假如i可以被5整除,则可以提供的5的个数为i/5个    public int trailingZeroes(int n) {        int result = 0;        long tmp = n; // 为了防止i*5超出int的表大表示范围        for (long i = 5; i <= tmp; i *= 5) {            result += n / i;        }        return result;    }}

 

转载地址:http://jpuvi.baihongyu.com/

你可能感兴趣的文章
qml有关矩形说明
查看>>
在qt中使用QSplitter设置初始比例setStretchFactor失效的解决方法
查看>>
repeater的使用
查看>>
qt msvc编译中文乱码解决
查看>>
qt中TextField输入框无法输入中文解决办法
查看>>
qt实现点击出现窗口,点击其他任何地方窗口消失
查看>>
QML DropArea拖拉文件事件
查看>>
CORBA links
查看>>
读后感:&gt;
查看>>
ideas about sharing software
查看>>
different aspects for software
查看>>
To do list
查看>>
Study of Source code
查看>>
如何使用BBC英语学习频道
查看>>
spring事务探索
查看>>
浅谈Spring声明式事务管理ThreadLocal和JDKProxy
查看>>
初识xsd
查看>>
java 设计模式-职责型模式
查看>>
构造型模式
查看>>
svn out of date 无法更新到最新版本
查看>>