打印Z字形矩阵

题目描述

给定一个二维矩阵,将其用Z字的形状打印出来;例如:

                {1, 2, 3, 4},
                {5, 6, 7, 8},
                {9, 10, 11, 12}

打印的结果应该是:

1	2	5	9	6	3	4	7	10	11	8	12	

思路

使用三个变量,row用来控制行,cel用来控制列,再用一个boolean型的控制元素的左移还是右移动。

代码

import org.junit.Before;
import org.junit.Test;

public class 打印z形状矩阵 {
    int[][] arr;

    @Before
    public void init() {
        arr = new int[][]{
                {1, 2, 3, 4},
                {5, 6, 7, 8},
                {9, 10, 11, 12}
        };
    }

    //1 2
    public void printArr() {
        int row = 0, cel = 0;
        int rn = arr.length, cn = arr[0].length;
        //只能向右走为true,只能向左走为false,初始是从左向右
        boolean lor = true;
        while (row < rn && cel < cn) {
            //只能向右边走
            if (lor) {
                System.out.print(arr[row][cel] + "\t");
                if (row == 0 && cel < cn) {
                    cel++;
                    //改变方向
                    lor = !lor;
                    continue;
                } else if (row == cn - 1 && cel < cn) {
                    cel++;
                    continue;
                } else if (cel == cn - 1&& row < rn) {
                    row ++;
                    lor = !lor;
                } else {
                    row--;
                    cel++;
                    continue;
                }

            } else {
                //只能向左边走
                System.out.print(arr[row][cel] + "\t");
                if (cel == 0 && row < rn) {
                    row++;
                    //靠到左边的边界上了
                    lor = !lor;
                    continue;
                } else if (row == rn - 1 && cel < cn) {
                    cel++;
                    lor = !lor;
                    continue;
                } else {
                    row++;
                    cel--;
                }

            }

        }

    }

    @Test
    public void test() {
        printArr();
    }
}

猜你喜欢

转载自blog.csdn.net/qq_38116774/article/details/88536129