Написано: 14.03.2023

48. Поворот изображения (Rotate Image)

medium

Задание.

У вас есть 2D-матрица, размером n x n, представляющая собой изображение.

Нужно повернуть изображение на 90 градусов (по часовой стрелке).

Нужно выполнить поворот на месте (in-place), что означает, что нужно непосредственно изменить входную 2D-матрицу.

Нельзя делать поворот, путём выделения другой 2D-матрицы.

Пример 1.

LeetCode-000048a

Входные данные: matrix = [ [1,2,3], [4,5,6], [7,8,9] ]

Результат: [ [7,4,1], [8,5,2], [9,6,3] ]

Пример 2.

LeetCode-000048b

Входные данные: matrix = [ [5,1,9,11], [2,4,8,10], [13,3,6,7], [15,14,12,16] ]

Результат: [ [15,13,2,5], [14,3,4,1], [12,6,8,9], [16,7,10,11] ]

Решение.

class Solution {
public:
    void rotate(vector<vector<int>>& matrix) {
        int n = matrix.size(), i, temp;
        int left = 0;
        int right = n-1;
        int top = 0;
        int bottom = n-1;
        while(top < bottom) {
            for(i = left; i < right; i++) {
                temp = matrix[top][i];
                matrix[top][i] = matrix[n-1-i][left];
                matrix[n-1-i][left] = matrix[bottom][n-1-i];
                matrix[bottom][n-1-i] = matrix[i][right];
                matrix[i][right] = temp;
            }
            top++; bottom--;
            left++; right--;
        }
    }
    void Print(vector<vector<int>>& matrix) {
        cout << endl;
        for(auto v : matrix) {
            cout << "{";
            for(auto one: v) {
                cout << one << " ";
            }
            cout << "}" << endl;
        }
    }
};

Способ решения.

LeetCode-000048c