两个Sum LeetCode-为什么我自己的代码失败

时间:2018-06-20 18:54:37

标签: python python-3.x

问题:

给出一个整数数组,返回两个数字的索引,以使它们加起来成为一个特定的目标。您可能会假设每个输入只有一个解决方案,并且可能不会两次使用相同的元素。


我的代码:

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,我不明白原因。

所以,如果有人可以解释正在发生的事情,或者告诉我一些关键词,以便自己寻找答案,我将非常感激:)

3 个答案:

答案 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))

这是我的解决方法。