У вас есть 2D-матрица, размером n x n, представляющая собой изображение.
Нужно повернуть изображение на 90 градусов (по часовой стрелке).
Нужно выполнить поворот на месте (in-place), что означает, что нужно непосредственно изменить входную 2D-матрицу.
Нельзя делать поворот, путём выделения другой 2D-матрицы.
Входные данные: matrix = [ [1,2,3], [4,5,6], [7,8,9] ]
Результат: [ [7,4,1], [8,5,2], [9,6,3] ]
Входные данные: 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;
}
}
};