[LeetCode]172. 阶乘后的零(java实现)质数分解
1. 题目
2. 读题(需要重点注意的东西)
思路(质数分解):
要求: 时间复杂度为对数级别O(logn)
主要思想:
- 设 n!= k
- k中尾随有多少个0,就等价于k能够因式分解出多少个10,每有一个10,就对应k后面的一个0
- k中有多少个10,亦等价于k中能分解出
多少对2和5
- 即k能分解出多少个2a 和多少个 5 b
- 对
a 和 b 取 min
,就是它们能组成的最大有多少对
如何计算 k 中能分解出多少个 2 和 5 ?(重点)
注意: 分子是n
,非 n!(n的阶乘)
最终
从上式我们可以知道,5出现的次数一定是小于2出现的次数的,因此,2 和 5 最大的对数就由5出现的次数决定,因此阶乘后的0的个数就为阶乘中5出现的次数
。
3. 解法
---------------------------------------------------解法---------------------------------------------------
class Solution {
public int trailingZeroes(int n) {
int res = 0;
while(n != 0){
res += n/5;
n /= 5;
}
return res;
}
}
可能存在的问题:
4. 可能有帮助的前置习题
5. 所用到的数据结构与算法思想
6. 总结
注意求 k! 中某一项质数分解的方法!