http://www.lintcode.com/zh-cn/problem/matrix-zigzag-traversal/
给你一个包含 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)往右边走一格,走不了,就向下走一格
(3)当前点左边斜下方遍历到底
(3)就向下走一格,走不了,往右边走一格
(4)循环1~3
public class Solution {
/*
* @param matrix: An array of integers
* @return: An array of integers
*/
public int[] printZMatrix(int[][] matrix) {
if(matrix==null)
return new int[0];
int m = matrix.length;
int n = matrix[0].length;
int[] res = new int[m*n];
int k=0;
int i=0,j=0;
res[k++]=matrix[0][0];
while(k<m*n){
//斜上走到顶
while(i-1>=0 && j+1<n){
res[k++] = matrix[--i][++j];
}
//向右边走一个,走不了就向下走
if(j+1<n){
res[k++] = matrix[i][++j];
}else if(i+1<m){
res[k++] = matrix[++i][j];
}
//斜下走到底
while(i+1<m && j-1>=0){
res[k++] = matrix[++i][--j];
}
//向下走一个,走不了就向右边走一个
if(i+1<m){
res[k++] = matrix[++i][j];
}else if(j+1<n){
res[k++] = matrix[i][++j];
}
}
return res;
}
}