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;
}