本文主要是介绍LeetCode--172. Factorial Trailing Zeroes,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Problem:
Given an integer n, return the number of trailing zeroes in n!.
Note: Your solution should be in logarithmic time complexity.
Analysis:
- 对n!做质因数分解n!=2x*3y*5z*… 显然0的个数等于min(x,z),并且min(x,z)==z
证明:
对于阶乘而言,也就是1*2*3*…*n [n/k]代表1~n中能被k整除的个数 那么很显然 [n/2] > [n/5]
(左边是逢2增1,右边是逢5增1) [n/2^2] > n/5^2 …… [n/2^p] >
n/5^p 随着幂次p的上升,出现2^p的概率会远大于出现5^p的概率。
因此左边的加和一定大于右边的加和,也就是n!质因数分解中,2的次幂一定大于5的次幂
还有一点要注意的就是25这种,5和5相乘的结果,所以,还要看n/5里面有多少个5,也就相当于看n里面有多少个25,还有125,625,,,
例如n=25, n!=25*24*23*…15…*10…*5…*1=(5*5)*24*23…(5*3)…(5*2)…(5*1)…*1,其中25可看成5*5,多了一个5,应该加上
//处理这个问题也很简单,首先对n÷5,移除所有的单个5,然后÷25,移除额外的5,以此类推。下面是归纳出的计算后缀0的公式。
//n!后缀0的个数 = n!质因子中5的个数= floor(n / 5) + floor(n / 25) + floor(n / 125) + ….
Answer:
public class Solution {public int trailingZeroes(int n) {int count=0;while(n/5 !=0){n = n / 5;count += n;}return count;}
}
这篇关于LeetCode--172. Factorial Trailing Zeroes的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!