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

"之"字形打印矩阵

作者: stoneyang94 | 来源:发表于2018-07-11 21:58 被阅读0次

    题目描述

    之字形打印一个矩阵

    之字形

    例如:

    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(aR,aC),B(bR,bC)(行,列),都从0,0点开始。

    • 宏观
      A向右走,当到最右点的时候(走过了 endC = matrix[0].length-1列),向下走
      B向下走,当到最下点的时候(走过了 endR = matrix.length-1行),向右走
    • 打印方向
      设置一个布尔变量表示从上到下还是从下到上打印
    • 结束
      当aR到最后一行的时候 或者 当bC到最后一列的时候标志着打印结束

    二维数组

    二维数组其实是由一维数组组成,比如

    int[][] arr = {
            {1,2,3,4},
            {4,5,6,8}
          };
    

    int rows = i.length;//行数
    int columns = i[0].length;//列数

    • length就是行数
    • 列数是具体到其中的一维里面,再求length

    代码实现

    public class ZigZagPrintMatrix {
        public static void zigZagPrintMatrix(int[][]matrix){
            if(matrix==null || matrix.length==0 || matrix[0].length==0){
                return ;
            }
            int aR = 0;//行
            int aC = 0;//列
            int bR = 0;//行
            int bC = 0;//列
            int endR = matrix.length-1;//行结束位置,的索引
            int endC = matrix[0].length-1;//列结束位置,的索引
            boolean fromUp = false;
            while(aR != matrix.length){//当aR到最后一行的时候 
                printMatrix(matrix, aR, aC, bR, bC, fromUp);
                aR = aC==endC ? aR+1 : aR;
                aC = aC==endC ? aC : aC+1;
                bC = bR==endR ? bC+1 : bC;
                bR = bR==endR ? bR : bR+1;
                fromUp = !fromUp;
            }
        }
    
        public static void printMatrix(int[][]matrix,int aR,int aC,
                                    int bR,int bC,boolean fromUp){
            if(fromUp){//从右上到左下
                while(aR!= bR+1){//一行一行扫过来
                    System.out.print(matrix[aR++][aC--]+" ");
                }
            }else {
                while(bR != aR-1){
                    System.out.print(matrix[bR--][bC++]+" ");
                }
            }
        }
        public static void main(String[] args) {
            int matrix[][] = new int[][]{
                {1, 2, 3,  4},
                {5, 6, 7,  8},
                {9, 10,11, 12},
                {13,14,15, 16}
            };
            zigZagPrintMatrix(matrix);
        }
    }
    
    输出

    相关文章

      网友评论

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

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