LintCode-矩阵的之字型遍历

容易 矩阵的之字型遍历

给你一个包含 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]

public class Solution {
    /**
     * @param matrix: a matrix of integers
     * @return: an array of integers
     */ 
    public int[] printZMatrix(int[][] matrix) {
        if(matrix == null){
            return null;
        }
        int m = matrix[0].length;
        int n = matrix.length;
        int i = 0;
        int count = n*m;
        int [] re = new int [count];
        int a=0,b=0;
        re[i++] = matrix[a][b];
        if(n == 1){
            return matrix[0];
        }
        if(m == 1){
            int [] ree = new int [n];
            for(int k =0; k<n;k++){
                ree[k] = matrix[k][0];
            }
        }
        while(i <count){
            //斜向上遍历
            while(a > 0 && b+1 < m){
                re[i++] = matrix[--a][++b];
            }
            //斜向上结束,试着往右或者下移动
            if(b+1 < m){
                re[i++] = matrix[a][++b];
            }else{
                if(a+1 <n){
                    re[i++] = matrix[++a][b];
                }
            }
            //斜向下遍历
            while(a+1 < n && b > 0){
                re[i++] = matrix[++a][--b];
            }
            //斜向下遍历结束,试着往下或者往右移动
            if(a+1 < n){
                re[i++] = matrix[++a][b];
            }else{
                if(b + 1 <m){
                    re[i++] = matrix[a][++b];
                }
            }
            
        }
        return re;
    }
}

    原文作者:Z字形编排问题
    原文地址: https://blog.csdn.net/Sunny_Ran/article/details/49722099
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞