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].

Solution:

public class Solution {
    public List<Integer> spiralOrder(int[][] matrix) {
        List<Integer> ans = new ArrayList<>();
        if(matrix.length==0) return ans;
        int[][] dir = new int[][]{{0,1},{1,0},{0,-1},{-1,0}};
        int[] step = new int[]{matrix[0].length, matrix.length-1};
        int i=0, j=-1;
        int d=0;
        while(step[d%2]>0){
            for(int k=0; k<step[d%2]; k++){
                i += dir[d][0];
                j += dir[d][1];
                ans.add(matrix[i][j]);
            }
            step[d%2]--;
            d = (d+1)%4;
        }
        return ans;
    }
}
comments powered by Disqus