Description

Given a matrix of _m _x _n _elements ( _m _rows, _n _columns), 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]

Solution

i = 0往右走或者往下走,然后往左下角走
j = 0往下走或者往右走,然后往右上角走
i = n - 1往右走,然后往右上角走
j = m - 1往下走,然后往左下角走

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] == null || matrix[0].length == 0) {
            return new int[0];
        }

        int n = matrix.length;
        int m = matrix[0].length;
        int[] ret = new int[n * m];
        ret[0] = matrix[0][0];
        int index = 1;
        int row = 0;
        int column = 0;
        boolean direction = false;
        while (index < m * n) {
            if (row == 0) {
                if (column < m - 1) {
                    ret[index++] = matrix[row][++column];
                } else if (row < n - 1) {
                    ret[index++] = matrix[++row][column];
                }
            } else if (column == 0) {
                if (row < n - 1) {
                    ret[index++] = matrix[++row][column];
                } else if (column < m - 1) {
                    ret[index++] = matrix[row][++column];
                }
            } else if (row == n - 1) {
                if (column < m - 1) {
                    ret[index++] = matrix[row][++column];
                }
            } else if (column == m - 1) {
                if (row < n - 1) {
                    ret[index++] = matrix[++row][column];
                }
            }

            if (row == 0 || column == 0 || row == n - 1 || column == m - 1) {
                direction = !direction;
            }

            if (direction) { //left-bottom
                if (row < n - 1 && column > 0) {
                    ret[index++] = matrix[++row][--column];
                }
            } else { //right top
                if (column < m - 1 && row > 0) {
                    ret[index++] = matrix[--row][++column];
                }
            }
        }

        return ret;
    }
}

results matching ""

    No results matching ""