1. 程式人生 > 其它 >演算法筆記-之字形列印陣列

演算法筆記-之字形列印陣列

  看到這道題一開始不知道從何入手,做完這道題有一種感受,那就是二維陣列的題其實也沒有那麼難,用二維陣列的兩個下標控制需要的點移動就可以了。回到這一題,我們使用雙指標去操作,如下圖所示:

a指標向右移動直到移動至4的位置,向下移動,b指標先向下移動直到移動到9的位置向右移動,這樣就可以找到對稱點,至於如何控制之字形的路徑,我們可以發現一個規律,之字形一定是一上一下這樣一次次迭代下去的,由此我們可以使用一個布林變數控制選擇上面的點還是下面的點,程式碼如下:

public class ZhizixingTest {

    static boolean f = false;
    public
static void zhizi(int[][] arr){ int aL = 0; int aR = 0; int bL = 0; int bR = 0; int endL = arr[0].length-1; int endR = arr.length-1; while (bL != endL+1){ printZz(arr,aL,aR,bL,bR); aR = aL == endL ? aR+1 : aR; aL
= aL == endL ? aL : aL+1; bL = bR == endR ? bL+1 : bL; bR = bR == endR ? bR : bR+1; } } private static void printZz(int[][] arr, int aL, int aR, int bL, int bR) { if(f){ while(aL != bL-1) System.out.println(arr[aR++][aL--]); }
else{ while (bL != aL+1) System.out.println(arr[bR--][bL++]); } f = !f; } public static void main(String[] args) { int[][] arr = {{1,2,3},{4,5,6},{7,8,9}}; zhizi(arr); } }

程式碼看著很簡單,主要還是前面的邏輯,這裡我被一個問題困了挺長時間,我需要判斷aL變數的大小,但是卻把值的修改放到了前面,導致我後面判斷時,總是和我想的不一樣,寫在此處,告誡自己,以後注意!!!