[Lintcode] Matrix Zigzag Traversal

来源:互联网 发布:sky 态度 科技知乎 编辑:程序博客网 时间:2024/06/10 15:10

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;    }}


0 0