我正在看这个leetcode question,它要求以蛇形图形对角地遍历矩阵(矩阵不必是正方形)。
首先让我承认我很顽固。我知道有不同的方法来解决这个问题,但我真的想让我的代码工作。
我编写了以下代码,用于搜索矩阵而不用蛇模式:
// no snake
public static void zigzag1(int[][] a) {
int M = a.length;
int N = a[0].length;
int skip = (-1) * M;
for (int i = 0; i < M + N - 1; i++) {
skip++;
for (int j = (skip > 0) ? skip : 0; j < N && j <= i; j++) {
int r = i - j;
int c = j;
System.out.print(a[r][c] + "\t");
}
System.out.println();
}
}
逻辑是假装矩阵的列被移位。例如,我们假装
1 2 3
4 5 6
7 8 9
看起来像这样:
1 x x
4 2 x
7 5 3
x 8 6
x x 9
遍历上面的虚构矩阵并将其相应的坐标移动到它需要的位置。
所以现在我需要做的就是添加蛇形图是反向遍历奇数行。但我不确定如何轻松做到这一点。我可以将(i,j)
坐标转换为(j,i)
的{{1}},而不是rows <= min(N,M)
。我太累了,我的大脑运作不正常。我不确定如何对坐标进行置换,使其以相反的顺序进行遍历。