题目
原文:
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?
译文:
给出一个表示NXN矩阵的图片,图片中的每个像素是4个字节,写一个方法把图片旋转90°,能否在原地进行操作?
解答
若将图片顺时针旋转90°,假如原图如下:
1 | 2 | 3 | 4 |
5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 |
13 | 9 | 5 | 1 |
14 | 10 | 6 | 2 |
15 | 11 | 7 | 3 |
16 | 12 | 8 | 4 |
转换后:
代码如下:
class Q1_6{
public static void rotate(int[][] matrix,int n){
for(int layer=0;layer<n/2;++layer){
int first=layer;
int last=n-1-layer;
for(int i=first;i<last;++i){
int offset=i-first;
int top=matrix[first][i]; //save top
//left->top
matrix[first][i]=matrix[last-offset][first];
//bottom->left
matrix[last-offset][first]=matrix[last][last-offset];
//right->bottom
matrix[last][last-offset]=matrix[i][last];
//top->right
matrix[i][last]=top; //right<-saved top
}
}
}
public static void main(String[] args){
int a[][]={
{1,2,3,4},
{5,6,7,8},
{9,10,11,12},
{13,14,15,16}
};
rotate(a,4);
for(int i=0;i<4;i++){
int j;
for(j=0;j<3;j++)
System.out.printf(a[i][j]+",");
System.out.println(a[i][j]);
}
}
}
此题若有其他更好的方法,还望指教!
---EOF---