程式設計師面試金典-1.7 旋轉矩陣。給定一幅由 N ×N 矩陣表示的影象,其中每個畫素的大小為 4 位元組,編寫 一種方法,將影象旋轉 90 度。不佔用額外記憶體空間能否做到?
阿新 • • 發佈:2021-11-04
圖解:
程式碼解決:
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; } }