题目
有一副由NxN矩阵表示的图像,这里每个像素用一个int表示,请编写一个算法,在不占用额外内存空间的情况下(即不使用缓存矩阵),将图像顺时针旋转90度。
给定一个NxN的矩阵,和矩阵的阶数N,请返回旋转后的NxN矩阵,保证N小于等于500,图像元素小于等于256。
我的题解
vector<vector<int> > transformImage(vector<vector<int> > mat, int n) {
// write code here
int level = 0, layer = (n + 1) / 2, tmp, row, col;
while(level < layer) {
for(int i = 0; i < n - 2 * level - 1; ++ i) {
row = level;
col = i + level;
int tmp1 = mat[row][col];
mat[row][col] = mat[n - col - 1][row];
int tmp2 = mat[col][n - row - 1];
mat[col][n - row - 1] = tmp1;
mat[n - col - 1][row] = mat[n - row - 1][n - col - 1];
mat[n - row - 1][n - col - 1] = tmp2;
}
level ++;
}
return mat;
}
策略是采取逐层旋转,每层逐个旋转,每个元素旋转要同时移动四个元素。