演算法題目---------------03轉圈列印矩陣(切割矩形)和正方形旋轉90度
阿新 • • 發佈:2018-12-09
給定左上角和右下角座標,將矩陣切割成一個個小矩形,依次遍歷輸出,注意有可能出現同行或同列的情況
public static void spiralOrderPrint(int[][] matrix) { int tR = 0; int tC = 0; int dR = matrix.length - 1; int dC = matrix[0].length - 1; while (tR <= dR && tC <= dC) { printEdge(matrix, tR++, tC++, dR--, dC--); } } /** *tR 左上角行 *tC 左上角列 *dR 右下角行 *dC 右下角列 */ public static void printEdge(int[][] m, int tR, int tC, int dR, int dC) { if (tR == dR) {//同行,則從左到右輸出 for (int i = tC; i <= dC; i++) { System.out.print(m[tR][i] + " "); } } else if (tC == dC) {//同列,則從上到下輸出 for (int i = tR; i <= dR; i++) { System.out.print(m[i][tC] + " "); } } else {//若構成一個矩形 int curC = tC; int curR = tR; while (curC != dC) { System.out.print(m[tR][curC] + " "); curC++; } while (curR != dR) { System.out.print(m[curR][dC] + " "); curR++; } while (curC != tC) { System.out.print(m[dR][curC] + " "); curC--; } while (curR != tR) { System.out.print(m[curR][tC] + " "); curR--; } } }
正方形旋轉也是同上思路,不過要扣邊界
public static void rotate(int[][] matrix) { int tR = 0; int tC = 0; int dR = matrix.length - 1; int dC = matrix[0].length - 1; while (tR < dR) { 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; } }