Почему он возвращает IndexError: список индексов вне диапазона, если индекс существует? - PullRequest
0 голосов
/ 16 января 2020

The question shows through the link

Учитывая, что матрица состоит из чисел 0 и 1, я пытаюсь найти максимальный размер квадрата, который содержит только 1.

My code

Я бы получил IndexError: список индексов вне диапазона, если я напишу приведенный выше код. Однако, если я изменю код, который находится в строке 34, на if arr[i-1][j-1] == '1':, то это сработает.

Мой вопрос: как это происходит? Я проверил тип элемента в arr, все они типа int, тогда почему он не работает, когда я пишу if arr[i-1][j-1] == 1:? Любой ответ будет полезен, заранее спасибо.

1 Ответ

0 голосов
/ 16 января 2020

dp имеет только 1 строку, содержащую (rows+1) * (cols+1) нули, но не rows+1 строки с cols+1 нулями. Поэтому, когда вы обращаетесь к dp[i] с i >= 1, вы получаете ошибку.

Это должно быть:

dp = [[0 for i in range(cols+1)] for j in range(rows+1)]

или проще

dp = [[0] * (cols+1) for _ in range(rows+1)]
...