数据结构与算法------之字打印数组

数据结构与算法------之字打印数组

题目如下,假设一个数组为数据结构与算法------之字打印数组_第1张图片
要求如下图打印数据结构与算法------之字打印数组_第2张图片
思路:在左上角设两个索引分别为A,B,A向右移,右移不了再向下移,B向下移,下移不了往右移。数据结构与算法------之字打印数组_第3张图片
变成了打印对角线的问题。
代码如下:

package com.dataStructure.array;

public class ZigZagPrintMatrix {
    public static void printMatrixZigZag(int[][] m){
        boolean flag=true;
        int tR=0;
        int tC=0;
        int dR=0;
        int dC=0;
        int endR=m.length-1;
        int endC=m[0].length-1;
        while(tR!=endR+1){
            printLevel(m,tR,tC,dR,dC,flag);
            tR=tC==endC?tR+1:tR;
            tC=tC==endC?endC:tC+1;
            dC=dR==endR?dC+1:dC;
            dR=dR==endR?endR:dR+1;

            flag=!flag;
        }
        System.out.println();
    }
    //给左下角以及右上角的值,斜对角线进行打印
    public static void printLevel(int[][] m, int tR, int tC, int dR, int dC,boolean f) {
        if(f){
            while(dR!=tR-1)
            System.out.print(m[dR--][dC++]+"      ");
        }else {
            while (tR != dR + 1) {
                System.out.print(m[tR++][tC--] + "      ");
            }
        }

    }

    //主函数
    public static void main(String[] args){
        int [][] m={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
        printMatrixZigZag(m);
    }
}

注意事项:

  1. tC=tC==endC?endC:tC+1;不要写成 tC=tC==endC?endC:tC+1; 这样当tC不等于endC时,tC的值等于tC而不是tC+1;
    理由与 int i=0;i=i++; i的值仍为0的理由一致
  2. 顺序问题
 tR=tC==endC?tR+1:tR;
 tC=tC==endC?endC:tC+1;

不可写为

 tC=tC==endC?endC:tC+1;
 tR=tC==endC?tR+1:tR;

因为先更改了tC的值,而tR的值还要根据tC的值得到

你可能感兴趣的:(数据结构与算法)