1.6 Given an image represented by an NxN matrix, where each pixel in the image is 4 bytes, write a method to rotate the image by 90 degrees. Can you do this in place?
public class Solution{
public static void rotateMatrix(int[][] M){
//clockwise(top->tmp right->bottom->left->top tmp->right)
int tmp = 0, len = M.length-1;
for(int i=0;i < M.length/2;i++){
for(int j=i;j < M.length-i-1;j++){
tmp = M[i][j];
M[i][j] = M[len-j][i];
M[len-j][i] = M[len-i][len-j];
M[len-i][len-j] = M[j][len-i];
M[j][len-i] = tmp;
}
}
}
private static void printMatrix(int[][] M){
for(int i=0;i < M.length;i++){
for(int j=0;j < M[i].length;j++)
System.out.print(M[i][j]+" ");
System.out.println();
}
}
public static void main(String[] args){
int[][] M = new int[][]{
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{2, 2, 2, 2, 2, 2, 2, 2, 2, 2},
{3, 3, 3, 3, 3, 3, 3, 3, 3, 3},
{4, 4, 4, 4, 4, 4, 4, 4, 4, 4},
{5, 5, 5, 5, 5, 5, 5, 5, 5, 5},
{6, 6, 6, 6, 6, 6, 6, 6, 6, 6},
{7, 7, 7, 7, 7, 7, 7, 7, 7, 7},
{8, 8, 8, 8, 8, 8, 8, 8, 8, 8},
{9, 9, 9, 9, 9, 9, 9, 9 ,9, 9}
};
Solution.printMatrix(M);
Solution.rotateMatrix(M);
System.out.println();//
Solution.printMatrix(M);
}
}
i->代表层数
j->代表某一层中第几个像素,最后一个像素不进行重复转置
图中红色区域代表坐标(i,j)的像素点
若知道当前要转置像素坐标(i,j),可推出,其余3个方向对应的转置像素点坐标与(i,j)之间的关系如下: