LeetCode两数之和问题:多测试用例返回[0,0]求助
解决LeetCode两数之和测试用例返回[0,0]的问题
问题复盘
我是编程新手,在做LeetCode两数之和简单题时遇到了问题:代码在Codecademy环境和LeetCode单测试用例下能正常运行,但跑2-3个测试用例时,第2、3个用例会返回[0,0]。一开始怀疑是LeetCode提供的类结构Class Solution: def twoSum(self, nums: List[int], target: int) -> List[int]:的问题,试过移除break也没用。
原代码如下:
class Solution: def twoSum(self, nums: List[int], target: int) -> List[int]: lengthlist = len(nums) a = 0 b = 0 for numbera in nums: for numberb in nums: if nums[a] + nums[b] == target: if a < b: return [a,b] break else: return [b,a] break else: continue a += 1 b += 1
问题根源
后来排查发现,核心问题是没有遵循题目中“不能重复使用同一元素”的限制。比如测试用例[3,2,4]、目标值6时,原代码会直接取nums[0]+nums[0]=6,返回[0,0],但正确结果应该是[1,2](2+4=6)。
另外原代码的索引逻辑也有bug:a += 1放在else: continue之后,只有当两数之和不等于target时才会执行,一旦满足条件就直接return,导致a永远停在0;内层循环从头遍历所有元素,必然会出现同一索引元素重复相加的情况。
修正方案
要解决这个问题,只需要让内层循环从外层索引的下一个位置开始遍历(即i+1),确保不会重复使用同一个元素。同时改用索引遍历,更清晰地控制遍历范围:
class Solution: def twoSum(self, nums: List[int], target: int) -> List[int]: n = len(nums) # 外层遍历每个元素的索引i for i in range(n): # 内层从i+1开始,避免重复使用nums[i] for j in range(i + 1, n): if nums[i] + nums[j] == target: return [i, j] # 题目保证有解,这里可以不用处理无解情况 return []
这种写法既符合题目要求,又能避免同一元素重复使用的问题,所有测试用例都能正常通过。
内容的提问来源于stack exchange,提问作者Svalin
相关产品推荐
相关产品推荐

