Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order.
Example
No.1
Input:
[
[ 1, 2, 3 ],
[ 4, 5, 6 ],
[ 7, 8, 9 ]
]
Output: [1,2,3,6,9,8,7,4,5]
No.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]
Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
|
public List<Integer> (int[][] matrix) { List<Integer> result = new ArrayList<>();
if (matrix == null || matrix.length == 0) return result;
int m = matrix.length; int n = matrix[0].length; int start = 0;
while (2 * start < m && 2 * start < n) { spiralOrderHelper(result, matrix, m, n, start); start++; }
return result; }
private void spiralOrderHelper(List<Integer> result, int[][] matrix, int m, int n, int start) { int endX = n - 1 - start; int endY = m - 1 - start;
for (int i = start; i <= endX; i++) result.add(matrix[start][i]);
if (endY > start) { for (int i = start + 1; i <= endY; i++) result.add(matrix[i][endX]); }
if (endY > start && endX > start) { for (int i = endX - 1; i >= start; i--) result.add(matrix[endY][i]); }
if (endY > start + 1 && endX > start) { for (int i = endY - 1; i > start; i--) result.add(matrix[i][start]); } }
|
近期评论