简介
【题目】
“之”字形打印矩阵
给定一个矩阵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
问题分析
每次打印是按斜线进行的,1,2-5,9-3,4-10,11-8,12
从左上角开始,点A向右移动,每次移动1,到达最后一列后开始向下移动,
点B向下移动,每次移动1,到达最后一行后开始向右移动,
循环打印A-B线上的所有数,直到AB其中一个到达右下角
代码实现
public class ZigzagPrintMatrix {
public static void main(String[] args){
int[][] arr={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
//int[][] arr={{1,2,3},{4,5,6},{7,8,9}};
//int[][] arr={{1},{4},{7}};
zigZagPrint(arr);
}
//zig zag print matrix
public static void zigZagPrint(int[][] arr){
int a=0;
int b=0;
int c=0;
int d=0;
int raw=arr.length-1;
int column=arr[0].length-1;
boolean isup=true;//一次向上,一次向下,交替
while(b!=column+1 && c!=raw+1){
printOneLine(arr,a,b,c,d,isup);
if(a>=raw){
a=raw;
b++;
}else {
a++;
}
if(d>=column){
d=column;
c++;
}else {
d++;
}
isup=!isup;
}
}
//print one line
private static void printOneLine(int[][] arr, int a, int b, int c, int d,boolean isup) {
if(isup==true){
while(a!=c-1&&b!=d+1){
System.out.print(arr[a--][b++]+" ");
}
}else {
while(c!=a+1&&d!=b-1){
System.out.print(arr[c++][d--]+" ");
}
}
}
}