如何优化统计小于N的完全平方数的Python代码以缩短执行时间
优化方案
原代码存在两处明显的冗余设计,是执行效率偏低的核心原因:
- 不需要循环遍历计算每个平方数,本质上小于N的正整数完全平方数的数量,等于小于√N的正整数的个数,可以直接通过平方根取整得到,时间复杂度从O(√N)直接降到O(1)
- 原代码中存储所有平方数的
list变量完全冗余,额外占用了O(√N)的内存空间,完全可以删除
如果N的量级很大(比如10^12),原代码需要执行百万次循环,优化后只需要一次平方根运算,执行效率提升非常明显。
优化后代码
import math class Solution: def countSquares(self, N): # Python 3.8+ 推荐用math.isqrt,避免大整数下浮点数精度误差 return math.isqrt(N - 1) # 低版本Python可以替换为下方写法 # return int(math.sqrt(N - 1))
逻辑验证
- 示例输入N=9时,N-1=8,
isqrt(8)=2,和示例输出一致,对应1、4两个符合要求的平方数 - 输入N=2时,N-1=1,
isqrt(1)=1,对应1个平方数1,符合预期 - 输入N=1时,N-1=0,
isqrt(0)=0,没有小于1的正完全平方数,符合预期
内容的提问来源于stack exchange,提问作者Sahil Karnany
相关产品推荐
相关产品推荐

