描述
按之字型遍历一个矩阵。
分析
之字形遍历顺序如下图所示:
处理一个二维矩阵一定不能陷入繁琐的细节处理中,如果此题思考方向为到了 2 后如何转向 5,到了 5 后如何转向 9,到了 9 后又如何转向 6,这样编程会变得异常复杂。应该抽象出子过程,本题的子过程就是遍历矩阵斜着的一行,只不过每隔一行遍历方向改变。如下图所示:
O1 和 O2 代表斜着一行的两个端点。根据遍历方向,从一个端点移动到另一个端点即可。每遍历完一行,O1 向右移动一格,O2 向左移动一格。当移动到边界时,O1 转为向下移动,O2 转为向右移动。两端点相遇,遍历结束。
代码
class Code_08_ZigZagPrintMatrix {
public static void printMatrixZigZag(int[][] matrix) {
// 定义 O1
int x1= 0;
int y1 = 0;
// 定义 O2
int x2 = 0;
int y2 = 0;
// x 最大值
int endR = matrix.length - 1;
// y 最大值
int endC = matrix[0].length - 1;
boolean fromUp = false;