/**
* “之”字形打印矩阵
* 【题目】 给定一个矩阵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);
}
}
算法入门-之字形打印
猜你喜欢
转载自blog.csdn.net/scanf_print_/article/details/82811875
今日推荐
周排行