【发布时间】:2014-11-11 00:17:36
【问题描述】:
这是来自 Cracking the Coding Interview 的一个问题。解决方案说程序先旋转外边缘,然后再旋转内边缘。但是,我在遵循两个 for 循环的逻辑时遇到了麻烦。
有人能解释一下代码的逻辑吗(例如他们为什么要做“layer top”和“bottom -> left”的四个步骤等)?顺便说一句,在编码面试中提出这个问题时,一个人的思维过程是怎样的?
给定一个由 NxN 矩阵表示的图像,其中每个像素 image 是 4 个字节,写一个方法将图像旋转 90 度。 你能做到这一点吗?
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
}
}
}
【问题讨论】:
标签: java matrix rotational-matrices