编辑
2022-10-21
代码刷题
0
请注意,本文编写于 699 天前,最后修改于 204 天前,其中某些信息可能已经过时。

目录

172. 阶乘后的零
题目
思路
解法
补充

172. 阶乘后的零

原题

题目

image-20220828112313399

思路

n!中有几个0[1,n]中出现多少个5的因数有关。例如7! = 1×2×3×4×5×6×7出现了1次5,故最后末尾会出现1个0。26!中出现了5,10,15,20,25其中5的个数为1+1+1+1+2=6,故最后末尾会出现6个0。

解法

c++
class Solution { public: int cal(int k){ if(k==0) return 0; else if(k%5==0){ return cal(k/5)+1; } return 0; } int trailingZeroes(int n) { int count = 0; for (int i = 0;i<n+1;i+=5){ count += cal(i); } return count; } };
  • 时间复杂度:O(n)O(n),其中nn为数组numsnums的长度,需要遍历一遍数组
  • 空间复杂度:O(1)O(1),仅使用常量空间

补充

image-20220828115103279

所以可知:

ans=n/5+n/52+n/53+ans = n/5+n/5^2+n/5^3+\cdots

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

复杂度:

  • 时间复杂度:O(logn)O(log\,n)
  • 空间复杂度:O(1)O(1)

本文作者:Geaming

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!