点击关注公众号,干货第一时间送达

还是一道非常经典的矩阵打印题目,
小编在力扣上没有找到原题,
不知道是没有,
还是关键词输入的有问题,
找到的小伙伴可以私信告诉小编一下
一、屏幕前的吴彦祖和刘亦菲们,请听题

举个例子:

其实就是折线打印:

题意明白否?
如何coding?
二、解题
矩阵打印这类题目,
一定要借助小编之前的文章:数据结构和算法【68】顺时针打印矩阵
介绍的技巧:
找辅助顶点
本题中,咱们从左上角找两个辅助点:

并且,两个顶点分别向右和向下移动。
在移动过程中,打印这两个顶点之间的对角线:

当(x1,y1)到达右边界,则向下移动;
当(x2,y2)到达下边界,则向右移动;

依据打印两个顶点间的对角线即可。
然后,对于 Z 字型打印,有从下到上,也有从上到下:

如何控制打印顺序?
简单,通过一个flag(boolean)标志控制即可。
看看代码。
完整代码:
public class CodingDemo {
/**
* TODO;Z字型打印矩阵
* @param matrix
*/
private static void zigzagPrint(int[][] matrix){
int x1 = 0;
int y1 = 0;
int x2 = 0;
int y2 = 0;
int endR = matrix.length-1;
int endC = matrix[0].length-1;
boolean flag = false;
while (x1 != endR + 1){
process4(matrix, x1, y1, x2, y2, flag);
//判断(x1,y1)是否到达右边界,如果达到右边界,则向下移动,
//否则只向右移动
x1 = y1 == endC ? x1+1 : x1;
y1 = y1 == endC ? y1 : y1+1;
//判断(x2,y2)是否到达下边界,如果到达下边界,则向右移动
y2 = x2 == endR ? y2+1 : y2;
x2 = x2 == endR ? x2 : x2+1;
flag = !flag;
}
}
private static void process4(int[][] matrix, int x1, int y1, int x2, int y2, boolean flag){
if (flag){
//斜对角线,从右上打印到左下
while (x1 != x2+1){
System.out.print(matrix[x1++][y1--] + " ");
}
} else {
//斜对角线,从左下打印到右上
while (x2 != x1-1){
System.out.print(matrix[x2--][y2++] + " ");
}
}
}
public static void main(String[] args) {
int[][] matrix = {
{1,2,3,4},
{5,6,7,8},
{9,10,11,12},
};
zigzagPrint(matrix);
}
}
输出:
D:\java\bin\java.exe
1 2 5 9 6 3 4 7 10 11 8 12

文章转载自皮皮克克,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




