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