美文网首页
“之”字形打印矩阵

“之”字形打印矩阵

作者: Ramsey16k | 来源:发表于2019-11-05 15:00 被阅读0次

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

    PS:我原本是想画图解释的,但是图片一直传不上去,简书这个图片上传问题存在好久了,现在我考虑换个平台写了。

    解题思路

    (1)定义两个坐标A、B。一开始他们都在左上角的位置。

    (2)A先向右移,移到最右一列后,再向下移,直到移到最后一行,停止。
    B向下移,移到最后一行后,再向右移,直到移到最后一列,停止。

    (3)写一个循环,终止条件是A的行号来到最后一行。

    • 如果A没有来到最后一列,它的行号就不变,列号每次加1;如果B没有来到最后一行,它的列号就不变,行号每次加1。

    • 当A来到最后一列,它的列号就不变了,行号每次加1;当B来到最后一行,它的行号就不变了,列号每次加1。

    (4)设定一个布尔变量,用来判断当前的打印顺序是从 左下 -> 右上 or 右上 -> 左下,每次循环就反转一次。

    public class ZigZagPrintMatrix {
    
        public static void printMatrixZigZag(int[][] matrix) {
            int aRow = 0;
            int aColumn = 0;
            int bRow = 0;
            int bColumn = 0;
            int endR = matrix.length - 1; // 终止行
            int endC = matrix[0].length - 1; // 终止列
            boolean fromUp = false; // 判断打印顺序从 左下 -> 右上 or 右上 -> 左下
            while (aRow != endR + 1) {
                printLevel(matrix, aRow, aColumn, bRow, bColumn, fromUp);
                aRow = aColumn == endC ? aRow + 1 : aRow;
                aColumn = aColumn == endC ? aColumn : aColumn + 1;
                bColumn = bRow == endR ? bColumn + 1 : bColumn;
                bRow = bRow == endR ? bRow : bRow + 1;
                fromUp = !fromUp;
            }
            System.out.println();
        }
    
        public static void printLevel(int[][] m, int aRow, int aColumn, int bRow, int bColumn, boolean f) {
            if (f) { // 右上 -> 左下
                while (aRow != bRow + 1) {
                    System.out.print(m[aRow++][aColumn--] + " ");
                }
            } else { // 左下 -> 右上
                while (bRow != aRow - 1) {
                    System.out.print(m[bRow--][bColumn++] + " ");
                }
            }
        }
    
        public static void main(String[] args) {
            int[][] matrix = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}};
            printMatrixZigZag(matrix);
        }
    }
    

    相关文章

      网友评论

          本文标题:“之”字形打印矩阵

          本文链接:https://www.haomeiwen.com/subject/lieubctx.html