题意:
You are given an n x n 2D matrix representing an image.
Rotate the image by 90 degrees (clockwise).
难度:Medium
解题思路一: 顺时针旋转90°,其实就是第i列倒序变成第 i行,很容易想到先把原矩阵复制到一个temp矩阵中,然后再遍历一次,把temp中的列按倒序复制到matrix的行中,时间复杂度O(n^2),空间复杂度O(n^2),这样做的空间开销太大。
class Solution {
public:
void rotate(vector<vector<int>>& matrix) {
if(matrix.size()==0)
return;
int row=matrix.size();
vector<vector<int>> temp;
int col=matrix[0].size();
for(int i = 0; i < row ; i++)
{
temp.push_back(matrix[i]);
}
for(int i = 0; i < row ; i++)
{
for(int j =0 ; j< col; j++)
{
matrix[i][j]=temp[row-1-j][i];
}
}
}
};
解题思路二:
注意到如果把列顺序和行交换,即矩阵转置后,对每行逆序后就是要求的旋转后的矩阵。 所以可以先对矩阵进行转置变换,再把每行的顺序颠倒,就可以得到答案了。这么做就不需要额外的空间开销,时间复杂度仍然为O(n^2)
class Solution {
public:
void rotate(vector<vector<int>>& matrix) {
if(matrix.size()==0)
return;
int row=matrix.size();
vector<vector<int>> temp;
int col=matrix[0].size();
for(int i = 0; i < row ; i++)
{
for(int j =i+1 ; j< col; j++)
{
int t=matrix[i][j];
matrix[i][j]=matrix[j][i];
matrix[j][i]=t;
}
}
for(int i = 0; i < row ; i++)
{
for(int j =0 ; j< col/2; j++)
{
int t=matrix[i][j];
matrix[i][j]=matrix[i][col-1-j];
matrix[i][col-1-j]=t;
}
}
}
};