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
| public List<Integer> spiralOrder(int[][] matrix) { List<Integer> res = new ArrayList<>(); if (matrix.length == 0 || matrix[0].length == 0) return res; int left = 0; int right = matrix[0].length - 1; int top = 0; int bottom = matrix.length - 1; while (true) { for (int i = left; i <= right; ++i) res.add(matrix[top][i]); top++; if (left > right || top > bottom) break; for (int i = top; i <= bottom; ++i) res.add(matrix[i][right]); right--; if (left > right || top > bottom) break; for (int i = right; i >= left; --i) res.add(matrix[bottom][i]); bottom--; if (left > right || top > bottom) break; for (int i = bottom; i >= top; --i) res.add(matrix[i][left]); left++; if (left > right || top > bottom) break; } return res; }
|