Given a matrix of m x nelements (m rows, ncolumns), return all elements of the matrix in ZigZag-order.
Example
Given a matrix:
[
[1, 2, 3, 4],
[5, 6, 7, 8],
[9,10, 11, 12]
]
return [1, 2, 5, 9, 6, 3, 4, 7, 10, 11, 8, 12]
设一个flag变量来储存走向.
public class Solution {
/**
* @param matrix: a matrix of integers
* @return: an array of integers
*/
public int[] printZMatrix(int[][] matrix) {
int height = matrix.length;
int width = matrix[0].length;
if(height == 0) return new int[0];
if(width == 0) return new int[0];
if(height == 1) return matrix[0];
int[] res = new int[height * width];
int col = 0, row = 0;
int pos = 0;
int dir = 1;
while(row != height - 1 || col != width - 1) {
res[pos] = matrix[row][col];
if(row == 0 && dir == 1) { //up
if(col != width - 1)
col += 1;
else
row += 1;
dir = -1;
pos++;
continue;
}
else if(col == 0 && dir == -1) {//left
if(row != height - 1)
row += 1;
else
col += 1;
dir = 1;
pos++;
continue;
}
else if(row == height - 1 && dir == -1) {//down
col += 1;
dir = 1;
pos++;
continue;
}
else if(col == width - 1 && dir == 1) {//right
row += 1;
dir = -1;pos++;
continue;
}
col = col + dir;
row = row - dir;
pos++;
}
res[res.length - 1] = matrix[height - 1][width - 1];
return res;
}
}