zigzag(Z字形)打印矩阵

public class test26 {
    //矩阵处理技巧
    public static void printMatrixZigZag(int[][] matrix){
        int AR = 0;//A的行数
        int AC = 0;//A的列数
        int BR = 0;//B的行数
        int BC = 0;//B的列数
        int Endr = matrix.length - 1;//最后的行数
        int Endc = matrix[0].length - 1;//最后的列数

        //是不是右上往左下打印
        boolean fromUp = false;  //一开始是左下往右上打印
        while (AR != Endr +1){
            printLevel(matrix,AR,AC,BR,BC,fromUp);//告诉斜线的两端A和B还有方向,去打印
          AR = AC == Endc ? AR +1 : AR;//A的列数如果到了最后一列,那么A的行号+1否则行号不变
          AC = AC == Endc ? AC : AC +1;//A的列数如果到了最后一列,那么列数不变,否则+1
          BC = BR == Endr ? BC +1 : BC;//B的行数如果到了最后一行,那么B的列数+1,否则不变
          BR = BR == Endr ? BR : BR +1;//B的列数如果到了最后一行,那么B的行数不变,否则+1
          fromUp = !fromUp;
        }
        System.out.println();
    }

public static void printLevel(int[][] m , int tR , int tC , int dR ,int dC ,boolean f){
        if(f){//右上往左下打印
            while (tR != dR+1){
                System.out.println(m[tR++][tC--] + " ");
            }
        }else{//左下往右上打印
            while (dR != tR-1){
                System.out.println(m[dR--][dC++] + " ");
            }
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值