程序员面试金典-1.7 旋转矩阵。给定一幅由 N ×N 矩阵表示的图像,其中每个像素的大小为 4 字节,编写 一种方法,将图像旋转 90 度。不占用额外内存空间能否做到?
图解:

代码解决:
public class RotateTest {
public static void main(String[] args) {
Integer[][] matrix = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}, {13, 14, 15, 16}};
System.out.println("旋转前数组:");
for (int i = 0; i < matrix.length; i++) {
System.out.println(Arrays.toString(matrix[i]));
}
boolean result = rotate(matrix);
System.out.println("是否可以旋转:" + result);
if (result) {
System.out.println("选择后数组:");
for (int i = 0; i < matrix.length; i++) {
System.out.println(Arrays.toString(matrix[i]));
}
}
}
private static boolean rotate(Integer[][] matrix) {
// 判断是否为正方矩形
int len = matrix.length;
int el = 2;
if (len == 0) {
return false;
}
for (int i = 0; i < len; i++) {
if (len != matrix[i].length) {
System.out.println(i);
return false;
}
}
for (int layer = 0; layer < len / el; layer++) {
int first = layer;
int last = len -1 - layer;
for (int j = first; j < last; j++) {
int offset = j -first;
// 存储上边
int top = matrix[first][j];
// 左边移动到上边
matrix[first][j] = matrix[last - offset][first];
// 下边移动到左边
matrix[last - offset][first] = matrix[last][last - offset];
// 右边移动到下边
matrix[last][last - offset] = matrix[j][last];
// 上边移动到右边
matrix[j][last] = top;
}
}
return true;
}
}

浙公网安备 33010602011771号