数据结构与算法(Java) 25:“之”字形打印矩阵

题目 给定一个矩阵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

要求 额外空间复杂度为O(1)。

思路 设起始点为[0,0]坐标处的点。设置两个游走点A和B,起始都位于[0,0]。每一次A往右走一步,B往下走一步,二者连成一条对角线为待打印的对角线。若A往右走到头则转向往下走,若B往下走到头则转向往右走。待打印对角线的打印方向用一个布尔类型的值标记一下即可。

package algorithm.section4;

public class printMatrixZigZag {
    public static void printZigZag(int[][] matrix){
        if (matrix == null) return;
        int aR = 0;
        int aC = 0;
        int bR = 0;
        int bC = 0;
        boolean flag = false;
        while (aR != matrix.length){
            print(matrix, aR, aC, bR, bC, flag);
            aR = aC == matrix[0].length - 1 ? aR + 1 : aR;
            aC = aC == matrix[0].length - 1 ? aC : aC + 1;
            bC = bR == matrix.length - 1 ? bC + 1 : bC;
            bR = bR == matrix.length - 1 ? bR : bR + 1;
            flag = !flag;
        }
    }

    public static void print(int[][] matrix, int aR, int aC, int bR, int bC, boolean flag){
        if (!flag){
            for (int i = bC; i <= aC; i++)
                System.out.print(matrix[bR--][i] + " ");
        } else {
            for (int i = aR; i <= bR; i++)
                System.out.print(matrix[i][aC--] + " ");
        }
    }

    public static void main(String[] args){
        int [][] matrix = {
                { 1, 2, 3, 4 },
                { 5, 6, 7, 8 },
                { 9, 10, 11, 12 }
        };
        printZigZag(matrix);
    }
}
发布了149 篇原创文章 · 获赞 36 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/Dorothy_Xue/article/details/105694076