题目

给你一幅由 ​​N × N​​ 矩阵表示的图像,其中每个像素的大小为 4 字节。请你设计一种算法,将图像旋转 90 度。

不占用额外内存空间能否做到?


题解

思路:先上下翻转,再沿着对角线进行翻转

public class Solution {
public void Rotate(int[][] matrix) {
int size = matrix.Length;
for (int i=0; i<size/2; i++)
{
for(int j=0; j<size; j++)
{
int temp = matrix[i][j];
int lowerIndex = size-i-1;
matrix[i][j] = matrix[lowerIndex][j];
matrix[lowerIndex][j]=temp;
}
}

for (int i=0; i<size; i++)
{
for(int j=0; j<i; j++)
{
int temp2 = matrix[i][j];
matrix[i][j]= matrix[j][i];
matrix[j][i]=temp2;
}
}

}
}


知识点

对矩阵使用Length求的是最大边的长度

沿对角线翻转的时候注意限制条件是j<i,否则就又二次翻转回去了


执行效果

【程序员面试金典】01.07 旋转矩阵(中等难度)_图像旋转