LeetCode返回False本地VSCode返回True,完美数检测代码问题求助
完美数检测代码LeetCode运行异常的解决办法
你的代码核心问题是在函数里用input语句覆盖了LeetCode传入的参数num:
- 本地运行时,你通过input手动输入数值,代码逻辑基于你输入的数计算,所以结果正确;
- 但LeetCode平台是直接把测试用例的数值传入函数的
num参数,你写的num = int(input("Enter number: "))会把平台传入的测试值替换掉(平台环境下这行代码无法获取有效输入,相当于num被改成了不符合预期的值),导致判断结果和预期相反。
修正后的代码如下,删掉input那行即可:
class Solution: def checkPerfectNumber(self, num: int) -> bool: if num <= 1: return False sum_total = 0 for i in range(1, num): if num % i == 0: sum_total += i return sum_total == num
额外提个小优化:遍历到num的平方根就能计算所有因数,不用遍历到num-1,能大幅提高效率,适合处理更大的数值:
class Solution: def checkPerfectNumber(self, num: int) -> bool: if num <= 1: return False sum_total = 1 # 1是所有大于1的数的因数 sqrt_num = int(num ** 0.5) for i in range(2, sqrt_num + 1): if num % i == 0: sum_total += i if i != num // i: # 避免平方数重复累加 sum_total += num // i return sum_total == num
内容的提问来源于stack exchange,提问作者Newbie100
相关产品推荐
相关产品推荐

