ZigZag traverse

Matrix Zigzag Traversal

分析题目

按之字形遍历矩阵,纯粹找下标规律。以题中所给范例为例,设(x, y)为矩阵坐标,按之字形遍历有如下规律:

(0, 0)
(0, 1), (1, 0)
(2, 0), (1, 1), (0, 2)
(0, 3), (1, 2), (2, 1)
(2, 2), (1, 3)
(2, 3)

可以发现其中每一行的坐标之和为常数,坐标和为奇数时 x 递增,为偶数时 x 递减。

public int[] printZigZag(int[][] array) {
    int m = array.length;
    int n = array[0].length;

    int[] result = new int[m * n];
    int index = 0;

    // 变换了m + n次方向
    for(int i = 0; i < m + n; i++) {
        if(i % 2 == 0) {
            for(int j = i; j >= 0; j--) {
                // valid matrix index
                if(j < m && i - j < n) {
                    result[index++] = matrix[j][i - j];
                }
            }
        }

        if(i % 2 == 1) {
            for(int j = 0; j <= i; j++) {
                if(j < m && i - j < n) {
                    result[index++] = matrix[j][i - j];
                }
            }
        }
    }

    return result;
}

results matching ""

    No results matching ""