打印例子如下,我们设置两个点分别是A、B。每次A往绿色箭头移动一步,B往蓝色箭头移动一步,所要打印的就是A、B连线之间的元素,但是要区分下方向(斜向上或者斜向下),打印结果为 1,2,5, 9 ,6, 3, 4 ,7, 1 0, 11, 8, 12
public class PrintZMatrix {
public static void PrintZ(int[][] arr) {
if(arr==null)
return;
boolean dir=true;
int lenR=arr.length-1;
int lenC=arr[0].length-1;
int aR=0,aC=0,bR=0,bC=0;//A、B点的初始坐标
do {
PrintLine(arr,aR,aC,bR,bC,dir);//打印A、B连线之间的点
if(aC<lenC)//A点移动
aC++;
else
aR++;
if(bR<lenR)//B点移动
bR++;
else
bC++;
dir=dir?false:true;//打印方向改变
/
} while (aR!=bR&&aC!=bC);
System.out.print(arr[aR][aC]);
}
public static void PrintLine(int[][] arr,int aR,int aC,int bR,int bC,boolean dir) {
if(dir)
{
while(bR>=aR)
{
System.out.print(arr[bR--][bC++]+" ");
//bR--;
//bC++;
}
}
else
{
while(bR>=aR)
{
System.out.print(arr[aR++][aC--]+" ");
//aR++;
//aC--;
}
}
}
public static void main(String[] args) {
int[][] arr= {{1,2,3,4},{5,6,7,8},{9,10,11,12}};
PrintZ(arr);
}
}
PrintZ()函数还可以修改成一下:
public static void PrintZ(int[][] arr) {
if(arr==null)
return;
boolean dir=true;
int lenR=arr.length-1;
int lenC=arr[0].length-1;
int aR=0,aC=0,bR=0,bC=0;
do {
PrintLine(arr,aR,aC,bR,bC,dir);
aR=aC==lenC?aR+1:aR;
aC=aC==lenC?aC:aC+1;
bC=bR==lenR?bC+1:bC;
bR=bR==lenR?bR:bR+1;
dir=!dir;
} while (aR<=lenR+1);
}