Spiral Matrix

Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order. For example, Given the following matrix:
[
[ 1, 2, 3 ],
[ 4, 5, 6 ],
[ 7, 8, 9 ]
]
You should return [1,2,3,6,9,8,7,4,5].

  • Time: O(n)
  • Space: O(1)
public List<Integer> spiralOrder(int[][] matrix) {
    List<Integer> ret = new ArrayList<>();
    if (matrix.length == 0 || matrix[0].length == 0) return ret; 
    int m = matrix.length, n = matrix[0].length, x = 0, y = -1;
    while (true) {
        for (int i = 0; i < n; i++) ret.add(matrix[x][++y]);
        if (--m == 0) break;
        for (int i = 0; i < m; i++) ret.add(matrix[++x][y]);
        if (--n == 0) break;
        for (int i = 0; i < n; i++) ret.add(matrix[x][--y]);
        if (--m == 0) break;
        for (int i = 0; i < m; i++) ret.add(matrix[--x][y]);
        if (--n == 0) break;
    }
    return ret;
}

results matching ""

    No results matching ""