演算法入門-旋轉正方形矩陣
阿新 • • 發佈:2018-12-11
/** * 旋轉正方形矩陣 * 【題目】 給定一個整型正方形矩陣matrix,請把該矩陣調整成順時針旋轉90度的樣子。 * 【要求】 額外空間複雜度為O(1)。 * 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 * @author Administrator * */ public class Code05_RotateMatrix { public static void rotateMatrix(int[][] matrix) { int tR = 0; int tC = 0; int dR = matrix.length -1 ; int dC = matrix[0].length - 1; while(tR <= dR && tC <= dC) { rotateEdge(matrix, tR++, tC++, dR--, dC--); } } public static void rotateEdge(int[][] m, int tR, int tC, int dR, int dC) { int times = dC - tC; int tmp = 0; for(int i = 0; i != times; i++) { tmp = m[tR][tC + i]; m[tR][tC + i] = m[dR - i][tC]; m[dR - i][tC] = m[dR][dC - i]; m[dR][dC - i] = m[tR + i][dC]; m[tR + i][dC] = tmp; } } public static void printMatrix(int[][] m) { for (int i = 0; i < m.length; i++) { for (int j = 0; j < m[0].length; j++) { System.out.print(m[i][j] + " "); } } System.out.println(); } public static void main(String[] args) { int[][] matrix = {{1,2,3,4}, {5,6,7,8}, {9,10,11,12}, {13,14,15,16}}; printMatrix(matrix); rotateMatrix(matrix); printMatrix(matrix); } }