问题:
给出一个整数数组,返回两个数字的索引,以使它们加起来成为一个特定的目标。您可能会假设每个输入只有一个解决方案,并且可能不会两次使用相同的元素。
我的代码:
def twoSum(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[int]
"""
for x in nums:
for y in nums:
if nums.index(x) != nums.index(y) and x + y == target :
return [nums.index(x), nums.index(y)]
print (twoSum ([3, 3],6))
输出:
null
在我看来,第一个“迭代”(我不太确定这是否是正确的术语)看起来像:
If 0 != 0 (False) and 3 + 3= 6 (True) --> as the first condition is not met, the y loops
所以下一次迭代看起来像:
If 0 != 1 (True) and 3 + 3 = 6 (True)
->满足上述条件,该函数将返回[0,1]
,但是代码实际上返回了null
,我不明白原因。
所以,如果有人可以解释正在发生的事情,或者告诉我一些关键词,以便自己寻找答案,我将非常感激:)
答案 0 :(得分:2)
正如MoxieBall所指出的,您的代码返回None
,因为.index()
返回了 first 匹配值的索引。
您可以使用enumerate()
来获取真实的索引位置:
for x_index, x_value in enumerate(nums):
for y_index, y_value in enumerate(nums):
if x_index != y_index and x_value + y_value == target:
return [x_index, y_index]
答案 1 :(得分:0)
index
方法将在列表中找到第一个匹配项的索引。由于您的列表具有两次相同的编号,因此代码中对index
的调用不会返回除0以外的任何值。因此,if nums.index(x) != nums.index(y)
永远不会True
,因此您的函数将返回{{1 }}。
答案 2 :(得分:0)
我认为由于[3,3]中的两个元素都相同,因此nums.index(x)和nums.index(y)始终等于0,因此if块永远不会执行。
def twoSum(self, nums, target):
for x in range(len(nums)):
for y in range(len(nums)):
if x != y and nums[x] + nums[y] == target :
return [x, y]
print (twoSum ([3, 3],6))
这是我的解决方法。