почему этот перерыв не работает? я должен получить [0,1] вернуть не [0,1,1,0] - PullRequest
0 голосов
/ 11 июня 2019

Не знаю, почему возвращается [0,1,1,0], а не [0,1]

def TwoSum(nums,target):
        c = []
        for i in range(0,len(nums)):
            for j in range(0,len(nums)):
                if nums[i] + nums[j] == target:
                    c.append(i)
                    c.append(j)
                    break     
        return c  



print(TwoSum([2, 7, 11, 15], 9))

Ответы [ 2 ]

1 голос
/ 11 июня 2019

Проблема с вашим кодом, проще говоря, в том, что он сканирует (2, 7) дважды: вперед и назад.

Сначала он выбирает 2 во внешнем цикле for и находит, что 7 работает, потому что 2 + 7 = 9. Таким образом, он добавляет позиции 2 и 7 к c. Теперь c = [0, 1]

Но затем он выбирает 7 во внешнем цикле for и находит, что 2 работает, потому что 7 + 2 = 9. Таким образом, он добавляет позиции 7 и 2 к c. Теперь c = [0, 1, 1, 0]

0 голосов
/ 11 июня 2019

break останавливает только внутренний цикл, если вы хотите немедленно вернуться, просто используйте return c

пожалуйста, дайте мне знать, если это работает:

def TwoSum(nums,target):
        c = []
        for i in range(0,len(nums)):
            for j in range(0,len(nums)):
                if nums[i] + nums[j] == target:
                    c.append(i)
                    c.append(j)
                    return c     
        return c  



print(TwoSum([2, 7, 11, 15], 9))
...