Разбор задачи: Переворачивание изображения

Предложенный нами код решения:

 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

Шаги решения

  1. Обход строк матрицы
    Мы используем цикл for row in image, чтобы поочередно работать с каждой строкой матрицы.
  2. Обход элементов строки
    Внутри строки применяем еще один цикл для одновременного переворота строки и инверсии значений. Это достигается с помощью:

    for i in range((len(row) + 1) // 2):
    

    Здесь (len(row) + 1) // 2 позволяет обработать каждую строку до её середины, так как при перевороте одновременно изменяются элементы с обеих сторон строки.

  3. Обмен элементов
    Для переворота используется конструкция:

    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] делает то же самое с левой стороны строки.
  4. Возврат результата
    После того как все строки обработаны, обновленная матрица возвращается с помощью:

    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]]

 



Вы должны Войти или Зарегистрироваться чтобы оставлять комментарии