“之”字形打印矩阵
【题目】 给定一个矩阵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)。
/*给定一个矩阵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
* 上方一个坐标(ar,ac),先向右移动,移动到最右端则向下移动
* 左面一个坐标(br,bc),先向下移动,移动到最下端则向右移动,初始位置都是(0,0)
* 终点位置(endr,endc)
* 然后实现对角线打印,通过布尔类型的变量控制对角线打印的方向
*/
public class 之字形打印矩阵 { public static void main(String[] args) { int[][] matrix = { { 1, 2, 3, 4 }, { 5, 6, 7, 8 }, { 9, 10, 11, 12 } }; printMatrixZigZag(matrix); } private static void printMatrixZigZag(int[][] matrix) { int ar = 0; int ac = 0; int br = 0; int bc = 0; int endr = matrix.length - 1; int endc = matrix[0].length - 1; boolean from = false; while(ar != endr) { printzhi(matrix,ar,ac,br,bc,from); ar = ac==endc ? ar+1 : ar; ac = ac==endc ? ac : ac+1; bc = br==endr ? bc+1 : bc; br = br==endr ? br : br+1; from = !from; } } private static void printzhi(int[][] matrix, int ar, int ac, int br, int bc, boolean from) { if(from) { while(ar != br+1) { System.out.print(matrix[ar++][ac--]+" "); } }else { while(br != ar-1){ System.out.print(matrix[br--][bc++]+" "); } } } }