leetcode上的一道题,如下:
错误代码:
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
for a in nums:
for b in nums:
if a + b == target and nums.index(a) != nums.index(b):
return [nums.index(a),nums.index(b)]
在进行测试时,传入的数组为[3,3],target值为6,预期输出为[0,1],实际输出了[0,0]
错误原因
- 虽然使用了
nums.index(a) != nums.index(b)
来避免取到同一个值,但是此做法无效 - 因为nums.index(a) 和 nums.index(b) 只会返回列表中
首次
出现 a 和 b 的位置,而不是当前循环
中的位置。- 例如当a遍历到第二个3时,nums.index(3)查询到的是列表中第一个数值为3的元素的索引,而不是a的索引
解决办法
for i in range(len(nums)):
for j in range(i + 1, len(nums)): # 从 i+1 开始,避免重复计算
if nums[i] + nums[j] == target:
print([i, j])
- 确保外层循环的索引 i 不等于内层循环的索引 j,以避免计算相同的元素对。