给你一幅由 N × N
矩阵表示的图像,其中每个像素的大小为 4 字节。请你设计一种算法,将图像旋转 90 度。
不占用额外内存空间能否做到?
示例 1:
给定 matrix = [ [1,2,3], [4,5,6], [7,8,9] ], 原地旋转输入矩阵,使其变为: [ [7,4,1], [8,5,2], [9,6,3] ]
示例 2:
给定 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) {
if (matrix.empty() || matrix[0].empty() ||
matrix.size() != matrix[0].size()) {
return ;
}
int s = matrix.size() - 1, t = 0, i = matrix.size() - 1, j = 0;
while (s >= 0) {
TransMatrix(matrix, s, t, i,j);
s -= 1, j += 1;
}
s = 0, t = matrix[0].size() - 1, i = 0, j = matrix[0].size() - 1;
while (t > 0) {
TransMatrix(matrix, s, t, i ,j);
t -= 1, i += 1;
}
s = 0, t = matrix.size() - 1;
while (s < t) {
for (int i = 0; i < matrix[0].size(); ++i) {
swap(matrix[s][i], matrix[t][i]);
}
s += 1, t -= 1;
}
}
void TransMatrix(vector<vector<int>>& matrix, int s, int t, int i, int j) {
while (s < i && t < j) {
swap(matrix[s][t], matrix[i][j]);
s += 1, t += 1, i -= 1, j -= 1;
}
}
};