打印矩阵 【之字矩阵】

说明

sx,sy 指向第一个元素,ex,ey 指向最后一个元素
先横向处理num[i,j] 到 num[j,i],后竖向处理,每次处理使用 flag调整打印方向
这里写图片描述


代码一

package com.company;

import org.junit.jupiter.api.Test;

public class PrintMatrixZigZag {

    @Test
    public void testPrint(){
        int[][] a = {{1,2,3,4}, {5,6,7,8},{9,10,11,12},{13,14,15,16}};
       printMatrix(a);
    }

    public static void printMatrix(int[][] num) {
        int sx = 0;
        int sy = 0;
        int ex = num.length;
        int ey = num[0].length;
        boolean flag = true;
        while (sy < ey) {
            print(num, sx, sy, flag, sy, sx);
            flag = !flag;
            sy ++;
        }
        sy--;
        while (sx < ex) {
            print(num, sx, sy, flag, sy, sx);
            flag = !flag;
            sx ++;
        }
    }

    private static void print(int[][] num, int x, int y, boolean flag, int x1, int y1) {
        if (flag) {
            /*===== 上到下 ======*/
            while (x1>=x && y1<=y) {
                System.out.print("-"+num[x++][y--]+"-");
            }
        }else{
            /*========下到上===*/
            while (x1>=x && y1<=y) {
                System.out.print("-"+num[x1--][y1++]+"-");
            }
        }
        System.out.println("");

    }
}

代码二

package com.company;

import org.junit.jupiter.api.Test;

public class PrintMatrixZigZag {

    @Test
    public void testPrint(){
        int[][] a = {{1,2,3,4}, {5,6,7,8},{9,10,11,12},{13,14,15,16}};
       printMatrix(a);
    }

    public static void printMatrix(int[][] num) {
        int sx = 0;
        int sy = 0;
        int ex = num.length-1;
        int ey = num[0].length-1;
        boolean flag = true;
        while (sx != ex) {
            print(num, sx, sy, flag, sy, sx);
            sx = sy == ey ? sx +1: sx;
            sy = sy == ey ? sy : sy +1;
            flag = !flag;
        }
    }

    private static void print(int[][] num, int x, int y, boolean flag, int x1, int y1) {
        if (flag) {
            /*===== 上到下 ======*/
            while (x1>=x && y1<=y) {
                System.out.print("-"+num[x++][y--]+"-");
            }
        }else{
            /*========下到上===*/
            while (x1>=x && y1<=y) {
                System.out.print("-"+num[x1--][y1++]+"-");
            }
        }
        System.out.println("");

    }
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值