172. 阶乘后的零
-
[题目链接](172. 阶乘后的零 - 力扣(LeetCode))
-
解题思路:首先得知道,
n!
一共有多少个0,取决于什么。取决于1~n
所有2的因数的个数和5的因数的个数。因为0,其实就是2*5得到的。- 怎么用对数时间计算
1~n
,2因子的个数?- 一种特殊的是2的幂次的,比如2、4、8、16,含有2因子的个数分别是1,2,3,4
- 另一种不是2的幂次,但是含有2这个因数,比如:6,10,12,14,含有2因子的个数分别是:1,1,2,1
- 好像没什么规律?其实不然,当我们算2的幂次的时候,假如n=16,现在计算的是2,用
n/2
,得到8,这8代表有8个因子,那么这8个因子分别从哪来的?从2(1)、4(1)、8(1)、16(1)、6(1)、10(1)、12(1)、14(1)
,括号中的代表因子个数。然后我们再计算2^2
也就是4,然后再n/4
,得到4,代表有4个因子,这4个因子哪来的?从4(1)、8(1)、16(1)、12(1)
,然后再计算2^3
也就是8,用n/8
,得到2,代表有2个因子,这2个因子哪来的,从8(1)、16(1)
,然后再计算2^4
也就是16,用n/16
,也就是1,代表有1个因子,这1个因子哪来的,从16(1)
来的。 - 也就是说,在分别计算幂次的时候,把所有的2因子提取出来了
- 计算5的因子个数同理
- 怎么用对数时间计算
-
代码
class Solution: # 计算1~n有几个num的因子 def count_factors(self, n, factor): count = 0 power = factor while power <= n: count += n // power power *= factor return count def trailingZeroes(self, n: int) -> int: count_2 = self.count_factors(n, 2) count_5 = self.count_factors(n, 5) return min(count_2, count_5)
标签:
leetcode刷题
, 数据结构与算法
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET10 - 预览版1新功能体验(一)