1.7 Rotate Matrix
Given an image represented by an N*N matrix, where each pixel(像素) in the image is 4 bytes, write a method to rotate te image by 90 degrees. Can you do this in place?
思路1:
1
分层实施旋转;
2
2.1 移动上层到数组;
2.2 移动左层 到上层 ;
2.3 移动下层 到左层 ;
2.4 移动右层 到下层 ;
2.5 移动上层 到右层 ;
缺点:需要额外一层的空间;
改良思路2:
根据索引,逐个
元素替换,优点: in-place,只占用一个额外空间
伪代码:
for i=0 to n
temp=top[i]
top[i]=left[i]
left[i]=bottom[i]
bottom[i]=right[i]
right[i]=temp[i]
从外层向内层实施;
C# 代码
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;
//save top
int top = matrix[first, i];
//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;
}
}
}