给定一个整数 n,返回 n! 结果尾数中零的数量。
示例 1:
输入: 3 输出: 0 解释: 3! = 6, 尾数中没有零。
示例 2:
输入: 5 输出: 1 解释: 5! = 120, 尾数中有 1 个零.
说明: 你算法的时间复杂度应为 O(log n) 。
求结果末尾有多少个零,如果有零则肯定能写成x * 10的k次方,有10出现则肯定有2和5出现,即可写成 x * 2的k次方 * 5的k次方。
也就是说,求有多少个零,就是求有多少对2 * 5,而从1到n,2因子出现的次数肯定比5因子出现的次数多。所以只需求有多少个5因子。
注意25有两个5因子,125有三个5因子
class Solution {
public:
int trailingZeroes(int n) {
int res = 0;
while(n)
{
res += n / 5;
n /= 5;
}
return res;
}
};
本文介绍了一种计算n!结果中尾数零数量的高效算法,通过分析2和5因子出现频率,只需O(log n)时间复杂度即可得出结果,特别关注了25、125等数包含多个5因子的情况。
116

被折叠的 条评论
为什么被折叠?



