You are given an n x n 2D matrix representing an image.
Rotate the image by 90 degrees (clockwise).
Follow up:
Could you do this in-place?
#include <iostream>
#include <vector>
using namespace std;
/************************************************************************/
/*
基本的步骤:
1、将数据按照y轴进行对折
2、将矩阵按照负对角线进行转置
*/
/************************************************************************/
void rotate(vector<vector<int> > &matrix) {
int rows = matrix.size();
int cols = matrix[0].size();
for(int i=0;i<cols/2;i++)
{
for(int j=0;j<rows;j++)
{
int temp = matrix[j][i];
matrix[j][i] = matrix[j][cols-1-i];
matrix[j][cols-1-i] = temp;
}
}
for(int i=0;i<cols-1;i++)
{
for(int j=0;j<rows-1-i;j++)
{
int temp = matrix[j][i];
matrix[j][i] = matrix[cols-1-i][rows-1-j];
matrix[cols-1-i][rows-1-j] = temp;
}
}
}
void printMatrix(vector<vector<int> > &matrix)
{
int rows = matrix.size();
int cols = matrix[0].size();
for(int i=0;i<rows;i++)
{
for(int j=0;j<cols;j++)
{
cout << matrix[i][j] << " ";
}
cout << endl;
}
}
int main(void)
{
vector<vector<int> > matrix;
vector<int> temp;
temp.push_back(1);
temp.push_back(2);
matrix.push_back(temp);
temp.clear();
temp.push_back(4);
temp.push_back(3);
matrix.push_back(temp);
rotate(matrix);
printMatrix(matrix);
system("pause");
return 0;
}