十九:“之”字形打印矩陣

題目

用zigzag的方式打印矩陣, 比如如下的矩陣
0 1 2 3
4 5 6 7
8 9 10 11
打印順序爲: 0 1 4 8 5 2 3 6 9 10 7 11

實現

import java.util.*;

public class Main {
    
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int m = in.nextInt();
        int[][] arr = new int[n][m];
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                arr[i][j] = in.nextInt();
            }
        }

        f(arr);        
    }
    
    //兩個點,a和b,剛開始,a往下走,b往右走,最後a右走,b往下走,到最後位置
    //一個變量控制從下往上打印,還是從上往下打印
    public static void f(int[][] m) {
        int ah = 0;
        int al = 0;
        int bh = 0;
        int bl = 0;
        boolean downUp = true;
        int row = m.length;
        int col = m[0].length;
        while (al != col && bh != row) {
            printEdge(m, ah, al, bh, bl, downUp);
            al = ah == row - 1 ? al + 1 : al;
            ah = ah == row - 1 ? ah : ah + 1;
            bh = bl == col - 1 ? bh + 1 : bh;
            bl = bl == col - 1 ? bl : bl + 1;
            downUp = !downUp;
        }
    }
    
    public static void printEdge(int[][] m, int ah, int al, int bh, int bl, boolean downUp) {
        //從下往上打印,對於a點來說,a點的行數ah在不斷你的變化
        if (downUp) {
            while (ah != bh - 1) {
                System.out.print(m[ah--][al++] + " ");
            }
        } else { //從上往下打印,對於b點來說,b的行在不斷的增加,列在不斷的減小
            while (bh != ah + 1) {
                System.out.print(m[bh++][bl--] + " ");
            }
            
        }
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章