给你一个包含 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-4步骤即可:
1、先斜上走到顶
2、再右移一步,若不能右移则下移一步
3、再斜下走到底
4、再下移一步,若不能下移则右移一步
public class Solution {
/**
* @param matrix: An array 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 row = matrix.length-1;
int col = matrix[0].length-1;
int[] res = new int[(row+1)*(col+1)];
//用于遍历matrix
int i=0;
int j=0;
//用于遍历存储res
int m = 0;
res[m] = matrix[i][j];
while(i != row || j != col){
//1、斜上走到顶
while(i-1>=0 && j+1<=col){
res[++m] = matrix[--i][++j];
}
//2、右移一步,若不能右移则下移一步
if(j+1 <= col){
res[++m] = matrix[i][++j];
}else if(i+1 <= row){
res[++m] = matrix[++i][j];
}
//3、斜下走到底
while(i+1<=row && j-1>=0){
res[++m] = matrix[++i][--j];
}
//4、下移一步,若不能下移则右移一步
if(i+1 <= row){
res[++m] = matrix[++i][j];
}else if(j+1 <= col){
res[++m] = matrix[i][++j];
}
}
return res;
}
}