算法面试之“之”字形打印矩阵

简介

【题目】

“之”字形打印矩阵

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

问题分析

每次打印是按斜线进行的,1,2-5,9-3,4-10,11-8,12
从左上角开始,点A向右移动,每次移动1,到达最后一列后开始向下移动,
点B向下移动,每次移动1,到达最后一行后开始向右移动,
循环打印A-B线上的所有数,直到AB其中一个到达右下角

代码实现

public class ZigzagPrintMatrix {
    public static void main(String[] args){
        int[][] arr={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
        //int[][] arr={{1,2,3},{4,5,6},{7,8,9}};
        //int[][] arr={{1},{4},{7}};
        zigZagPrint(arr);
    }

    //zig zag print matrix
    public static void zigZagPrint(int[][] arr){
        int a=0;
        int b=0;
        int c=0;
        int d=0;
        int raw=arr.length-1;
        int column=arr[0].length-1;
        boolean isup=true;//一次向上,一次向下,交替
        while(b!=column+1 && c!=raw+1){
            printOneLine(arr,a,b,c,d,isup);
            if(a>=raw){
                a=raw;
                b++;
            }else {
                a++;
            }
            if(d>=column){
                d=column;
                c++;
            }else {
                d++;
            }
            isup=!isup;
        }
    }

    //print one line
    private static void printOneLine(int[][] arr, int a, int b, int c, int d,boolean isup) {
        if(isup==true){
            while(a!=c-1&&b!=d+1){
                System.out.print(arr[a--][b++]+" ");
            }
        }else {
            while(c!=a+1&&d!=b-1){
                System.out.print(arr[c++][d--]+" ");
            }
        }
    }
}
    原文作者:Z字形编排问题
    原文地址: https://blog.csdn.net/qq_37433657/article/details/84189917
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞