Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order.
Example 1:
Input: [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] ] Output: [1,2,3,6,9,8,7,4,5]
Example 2:
Input: [ [1, 2, 3, 4], [5, 6, 7, 8], [9,10,11,12] ] Output: [1,2,3,4,8,12,11,10,9,5,6,7]
直接模拟
class Solution {
public List<Integer> spiralOrder(int[][] matrix) {
List<Integer> res = new ArrayList<>();
if (matrix.length == 0 || matrix[0].length == 0)
return res;
int beginX = 0, endX = matrix[0].length - 1;
int beginY = 0, endY = matrix.length - 1;
while (true) {
for (int i = beginX; i <= endX; i++) {
res.add(matrix[beginY][i]);
}
if (++beginY > endY)
break;
for (int j = beginY; j <= endY; j++) {
res.add(matrix[j][endX]);
}
if (--endX < beginX)
break;
for (int i = endX; i >= beginX; i--) {
res.add(matrix[endY][i]);
}
if (--endY < beginY)
break;
for (int j = endY; j >= beginY; j--) {
res.add(matrix[j][beginX]);
}
if (++beginX > endX)
break;
}
return res;
}
}