辅助数组
- 第i行第j列的元素,旋转之后在第j行倒数第i列
class Solution {
public:
void rotate(vector<vector<int>>& matrix) {
int n = matrix.size();
auto newmatrix = matrix;
for(int i=0; i<n; i++)
{
for(int j=0; j<n; j++)
{
matrix[j][n-i-1] = newmatrix[i][j];
}
}
}
};
原地旋转
- 旋转和第i行第j列的元素,旋转之前在第j行倒数第i列的元素
- 正方形有四条边,所以原地旋转时,需要交换这四个元素的值
class Solution {
public:
void rotate(vector<vector<int>>& matrix) {
int n = matrix.size();
for(int i=0; i<n/2; i++)
{
for(int j=0; j<(n+1)/2; j++)
{
int tmp = matrix[i][j];
matrix[i][j] = matrix[n-j-1][i];
matrix[n-j-1][i] = matrix[n-i-1][n-j-1];
matrix[n-i-1][n-j-1] = matrix[j][n-i-1];
matrix[j][n-i-1] = tmp;
}
}
}
};
水平翻转+对角线翻转
class Solution {
public:
void rotate(vector<vector<int>>& matrix) {
int n = matrix.size();
for(int i=0; i<n/2; i++)
{
for(int j=0; j<n; j++)
{
swap(matrix[i][j], matrix[n-i-1][j]);
}
}
for(int i=0; i<n; i++)
{
for(int j=0; j<i; j++)
{
swap(matrix[i][j], matrix[j][i]);
}
}
}
};