Вопрос о локальной переменной, диапазоне, в Python - PullRequest
0 голосов
/ 18 февраля 2020

Я решаю проблему алгоритма в https://leetcode.com/problems/two-sum.

Вот мой код:

class Solution:
    def twoSum(self, nums, target):
        list_length = len(nums)
        result = list()
        for i in range(0, list_length):
            for j in range(i+1, list_length):
                s = i + j
                if s == target:
                    result.append(i)
                    result.append(j)
                    return result

s = Solution()
ts = s.twoSum([2, 7, 11, 15], 9)
print(ts)

Вывод None.

Я хочу знать, почему это None, а не [0,1].

Ответы [ 3 ]

1 голос
/ 18 февраля 2020

При вычислении s вы суммируете числа (i и j), которые вы просматриваете, а не элементы в этих числах. Это работает:

class Solution:
    def twoSum(self, nums, target):
        list_length = len(nums)
        result = list()
        for i in range(list_length):
            for j in range(1, list_length):
                s = nums[i] + nums[j]
                if s == target:
                    result.append(i)
                    result.append(j)
                    return result
s = Solution()
ts = s.twoSum([2, 7, 11, 15], 27)
print(ts)
0 голосов
/ 18 февраля 2020

Я лично нахожу пару вещей, которые ваш код мог бы сделать лучше. Во-первых, в вашем классе нет ничего, поскольку оно не имеет отступов. Во-вторых, я считаю метод добавления утомительным. Вы можете инициализировать список с a = [""]* length, где будет создан список с заданной длиной.

0 голосов
/ 18 февраля 2020

Отступ важен, и ссылки i и j относятся к индексу в списке примера nums, [0,3,4], поэтому num [0] равно 0 et c. и др c. И это хорошая привычка использовать основной метод внизу, хотя это необязательно в зависимости от того, что вы делаете. Надеюсь, это поможет ..

class Solution:

   def twoSum(self, nums, target):
      list_length = len(nums)
      # actually use the list() functionality here not 'list()'but '[]'
      result = []
      for i in range(list_length):
         for j in range(1, list_length):
            s = nums[i] + nums[j]
            if s == target:
              result.append(i)
              result.append(j)
              return result


if __name__ == "__main__":
  #use a main method if possible
  s = Solution()
  ts = s.twoSum([2, 7, 11, 15], 9)
  print(ts)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...