题目描述
给定一个二维矩阵,将其用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();
}
}