给你一幅由 N × N
矩阵表示的图像,其中每个像素的大小为 4 字节。请你设计一种算法,将图像旋转 90 度。
不占用额外内存空间能否做到?
matrix =
[
[1,2,3],
[4,5,6],
[7,8,9]
],
原地旋转输入矩阵,使其变为:
[
[7,4,1],
[8,5,2],
[9,6,3]
]
思路:
1、先做一个关于(左上至右下)对角线对称的swap
2、再做一个关于竖直中心线对称的swap
关键点:
找到交换元素的index的关系
算法代码:
class Solution {
public:
void rotate(vector<vector<int>>& matrix) {
for (int i = 0; i < matrix.size(); i++)
{
for (int j = 0; j < i; j++)
{
swap(matrix[i][j], matrix[j][i]);
}
}
for (int k = 0; k < matrix.size(); k++)
{
for (int m = 0; m < (matrix.size() / 2); m++)
{
swap(matrix[k][m], matrix[k][matrix.size() - 1 - m]);
}
}
}
};