如何相对于移位矩阵反向置换一行

时间:2017-12-10 23:45:03

标签: algorithm

我正在看这个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)。我太累了,我的大脑运作不正常。我不确定如何对坐标进行置换,使其以相反的顺序进行遍历。

0 个答案:

没有答案