演算法入門-之字形列印
阿新 • • 發佈:2018-12-11
/** * “之”字形列印矩陣 * 【題目】 給定一個矩陣matrix,按照“之”字形的方式列印這個矩陣, * 例如: 1 2 3 4 * 5 6 7 8 * 9 10 11 12 * “之”字形列印的結果為:1,2,5,9,6,3,4,7,10,11,8,12 * 【要求】 額外空間複雜度為O(1)。 * @author Administrator * */ public class Code07_ZigZagPrintMatrix { public static void printZigZagMatrix(int[][] matrix) { int tR = 0; int tC = 0; int dR = 0; int dC = 0; int endR = matrix.length - 1; int endC = matrix[0].length - 1; boolean toDown = false; while(tR != endR + 1) { printLevel(matrix, tR, tC, dR, dC, toDown); tR = tC == endC ? tR + 1 : tR; // 列印完一行後行數加1 tC = tC == endC ? tC : tC + 1; // 不到最後一列,列數加1 dC = dR == endR ? dC + 1 : dC; dR = dR == endR ? dR : dR + 1; toDown = !toDown; } } // 列印右上角點 與 左下角點 連成的直線 public static void printLevel(int[][] matrix, int tR, int tC, int dR, int dC, boolean toDown) { if(toDown) { while(tR != dR + 1) { System.out.print(matrix[tR++][tC--] + " "); } } else { while(dR != tR - 1) { System.out.print(matrix[dR--][dC++] + " "); } } } public static void main(String[] args) { int[][] matrix = { { 1, 2, 3, 4 }, { 5, 6, 7, 8 }, { 9, 10, 11, 12 } }; printZigZagMatrix(matrix); } }