Python程序出现Time limit exceeded错误:调用perfect_square(0)超时
问题分析与修复方案
问题根源
调用perfect_square(0)时触发无限循环导致超时:
函数初始s=1,循环条件s != n(即1 != 0)永远成立,每次循环s都会递增,永远无法等于0,也不会触发返回True的分支,最终导致超时。
修复后的代码
完美平方数判断函数
def perfect_square(n): # 0是完美平方数,直接返回True if n == 0: return True # 负数不可能是完美平方数 if n < 0: return False s = 1 # 当s的平方超过n时,无需继续循环 while s * s <= n: if s * s == n: return True s += 1 return False
完美立方数判断函数
def perfect_cube(n): # 0是完美立方数,直接返回True if n == 0: return True # 处理负数情况,立方数可以是负数 abs_n = abs(n) s = 1 # 当s的立方超过n的绝对值时,无需继续循环 while s * s * s <= abs_n: if s * s * s == abs_n: return True s += 1 return False
关键修复点
- 提前处理特殊值:直接判断
n=0的情况,避免进入无效循环。 - 优化循环终止条件:当
s的平方/立方超过目标数时立即终止循环,避免不必要的计算和无限循环。 - 补充边界判断:完美平方函数增加负数判断(平方数非负),完美立方函数兼容负数场景(负数可以是立方数)。
内容的提问来源于stack exchange,提问作者Nerea Valdivieso
相关产品推荐
相关产品推荐

