给你一个包含 m x n 个元素的矩阵 (m 行, n 列), 求该矩阵的之字型遍历。
样例
对于如下矩阵:
[
[1, 2, 3, 4],
[5, 6, 7, 8],
[9,10, 11, 12]
]
返回 [1, 2, 5, 9, 6, 3, 4, 7, 10, 11, 8, 12]
[1,// 2, 5,// 9, 6, 3,// 4, 7, 10, //11, 8,// 12]对角线
public class Solution {
/**
* @param matrix: a matrix of integers
* @return: an array of integers
*/
public int[] printZMatrix(int[][] matrix) {
// write your code here
//空数组或者单行单列时没有之字型遍历
if(matrix == null || matrix.length == 0 || matrix[0].length == 0)
return null;
int rows = matrix.length;//矩阵行数
int cols = matrix[0].length;//矩阵列数
int count = rows*cols;//数组长度
int i=1;
int[] array = new int[count];
int row = 0;
int col = 0;
array[0] = matrix[0][0];
//从矩阵第一个元素出发后,先横右再歇下再竖下在斜上
while ( i < count ) {//保证写满数组
//斜上走到顶[row][col]的斜上为[row-1][col+1]
while(i < count && row - 1 >= 0 && col + 1 <= cols-1) {
array[i++] = matrix[--row][++col];
//++i是先加1再赋值
//i++是先赋值再加1
}
//横右或竖下
if (i < count && col + 1 <= cols-1) {
array[i++] = matrix[row][++col];
} else if (i < count && row + 1 <= rows-1) {
array[i++] = matrix[++row][col];
}
//斜下走到底[row+1][col-1]
while(i < count && row + 1 <=rows-1 && col - 1 >= 0) {
array[i++] = matrix[++row][--col];
}
//竖下或横右
if (i < count && row + 1 <= rows-1) {
array[i++] = matrix[++row][col];
} else if (i < count && col + 1 <=cols-1) {
array[i++] = matrix[row][++col];
}
}
return array;
}
}