Программа курса:
Разбор задачи: Переворачивание изображения
Предложенный нами код решения:
def flipAndInvertImage(image):
"""
:type image: List[List[int]]
:rtype: List[List[int]]
"""
# Перебираем каждую строку матрицы
for row in image:
# Переворачиваем строку и инвертируем значения одновременно
for i in range((len(row) + 1) // 2):
# Инвертируем с учетом переворота
row[i], row[~i] = 1 - row[~i], 1 - row[i]
return imageШаги решения
- Обход строк матрицы
Мы используем циклfor row in image, чтобы поочередно работать с каждой строкой матрицы. Обход элементов строки
Внутри строки применяем еще один цикл для одновременного переворота строки и инверсии значений. Это достигается с помощью:for i in range((len(row) + 1) // 2):Здесь
(len(row) + 1) // 2позволяет обработать каждую строку до её середины, так как при перевороте одновременно изменяются элементы с обеих сторон строки.Обмен элементов
Для переворота используется конструкция:row[i], row[~i] = 1 - row[~i], 1 - row[i]row[i]— текущий элемент с левой стороны строки.row[~i]— текущий элемент с правой стороны строки, где~iэквивалентен-i-1(индексация с конца списка).
Таким образом, элементы с обоих концов строки меняются местами, одновременно инвертируясь:1 - row[~i]заменяет0на1и1на0с правой стороны строки.1 - row[i]делает то же самое с левой стороны строки.
Возврат результата
После того как все строки обработаны, обновленная матрица возвращается с помощью:return image
Пример работы
Рассмотрим пример:
Входная матрица:
[[1, 1, 0],
[1, 0, 1],
[0, 0, 0]]
Шаг 1: Переворот строк
Переворачиваем каждую строку:
[[0, 1, 1],
[1, 0, 1],
[0, 0, 0]]
Шаг 2: Инверсия значений
Инвертируем значения в каждой строке:
[[1, 0, 0],
[0, 1, 0],
[1, 1, 1]]
Результат:
Возвращается обновленная матрица:
[[1, 0, 0],
[0, 1, 0],
[1, 1, 1]]
Вы должны Войти или Зарегистрироваться чтобы оставлять комментарии