什麼是之字形打印二維數組:
比如給定一個二維數組
按照紅色線路打印,即稱作“之”字型打印
怎麼實現呢?想要直接尋找每個位置與位置之間的關係是很難的,所以我們需要從這個線路着手,怎麼能走出這樣的線路呢?
我們設置兩個指針a和b,各自的行走線路如下:
有什麼用呢?ab總能形成一個對角線,
形成了對角線,然後設置一個boolean類型的flag,控制打印的方向,如果flag爲true,就從下往上打印,如果爲false就從上往下打印
所以打印順序就是這樣:
.看一下代碼:
package Mianshi;
public class PrintZhi {
public static void printZhi(int[][] arr){
int aR = 0;//a的行座標
int aC = 0;//a的列座標
int bR = 0;//b的行座標
int bC = 0;//b的列座標
int endR = arr.length - 1;//b走到endR表示走完了
int endC = arr[0].length - 1;//a走到endC表示走完了
boolean flag = false;
while(endR + 1 != aR){
printTmpArrNum(arr, aR,aC,bR,bC,flag);
aR = aC == endC ? aR + 1 : aR;//不能寫aR++
aC = aC == endC ? aC : aC + 1;
bC = bR == endR ? bC + 1 : bC;
bR = bR == endR ? bR : bR + 1;
flag = !flag;
System.out.println();
}
}
private static void printTmpArrNum(int[][] arr, int aR, int aC, int bR, int bC, boolean flag) {
if (flag){
while (aR != bR + 1)
System.out.print(arr[aR++][aC--]+" ");
}else {
while (bR != aR - 1){
System.out.print(arr[bR--][bC++]+" ");
}
}
}
public static void main(String[] args) {
int[][] matrix = { { 1, 2, 3, 4 }, { 5, 6, 7, 8 }, { 9, 10, 11, 12 } };
printZhi(matrix);
}
}
生成一個圖,便於理解:
a,b最開始都是(0,0),(3,3)作爲終止條件,如果a的行到了3,說明他執行完畢了,因爲a先往右走,到了(0,3),還是第0行,然後才往下走,等行數到了3,才終止。
b是從下開始走,到了(3,0),然後右拐,直到(3,3)終止。
找到了a,b的座標以後打印就比較簡單了,只要通過boolean判斷即可!~