算法入门-之字形打印

/**
 * “之”字形打印矩阵
 * 【题目】 给定一个矩阵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