“之”字形打印矩阵

2022-05-13 10:01:44 浏览数 (1)

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

算法实现思想 定义一个A点从左上角先沿着左边框移动,到最下一点时候向右移动 定义一个B点从左上角先沿着上边框移动,到最右一点时候向下移动 打印每次移动后,两者之间的数字;

代码

代码语言:javascript复制
package com.day1.practice;

public class  PrintMatrixZigZag{
   public static void printMatrixZigZag(int[][] matrix) {
        //A点
        int aR=0;
        int aC=0;
        //B点
        int bR=0;
        int bC=0;
        int endR=matrix.length-1;//结束行索引
        int endC=matrix[0].length-1;//结束列索引
       boolean upFlag=true;
        while (aC!=endC 1){
            printSlash(matrix,aR,aC,bR,bC,upFlag);
           //{   1, 2,  3,  4   },
           //{   5, 6,  7,  8   },
           //{   9, 10, 11, 12  },
           //{   13,14, 15, 16  }
            if (aR<endR){
                aR  ;
            }else {
                aC  ;
            }
            if (bC<endC){
                bC  ;
            }else {
                bR  ;
            }
            upFlag=!upFlag;
        }

    }
    public static void  printSlash(int[][] matrix,int aR,int aC ,int bR,int bC,boolean upFlag){ //打印AB之间斜线上的数字
        if (upFlag){
            int currR=aR;
            int currC=aC;
            for(int i=aR;i>=bR;i--){
                System.out.println(matrix[currR][currC] " ");
                currR--;
                currC  ;
            }
        }else {
            int currR=bR;
            int currC=bC;
            for(int i=bC;i>=aC;i--){
                System.out.println(matrix[currR][currC] " ");
                currR  ;
                currC--;
            }
        }
    }
    public static void main(String[] args){
        int [][] matrix = {
                {   1, 2,  3,  4   },
                {   5, 6,  7,  8   },
                {   9, 10, 11, 12  },
                {   13,14, 15, 16  }
        };
        printMatrixZigZag(matrix);
      
    }

}

打印结果

0 人点赞