54 螺旋矩阵

  1. class Solution {
  2. public List<Integer> spiralOrder(int[][] matrix) {
  3. if (matrix == null)
  4. return null;
  5. if (matrix.length == 0 || matrix[0].length == 0)
  6. return new ArrayList<Integer>();
  7. List<Integer> list = new ArrayList<Integer>();
  8. int start = 0;
  9. while (2 * start < matrix.length && 2 * start < matrix[0].length) {
  10. int endX = matrix[0].length - 1 - start;
  11. int endY = matrix.length - 1 - start;
  12. for (int i = start; i <= endX; ++i)
  13. list.add(matrix[start][i]);
  14. if (endY > start)
  15. for (int i = start + 1; i <= endY; ++i)
  16. list.add(matrix[i][endX]);
  17. if (start < endX && start < endY)
  18. for (int i = endX - 1; i >= start; --i)
  19. list.add(matrix[endY][i]);
  20. if (start < endX && start < endY - 1)
  21. for (int i = endY - 1; i >= start + 1; --i)
  22. list.add(matrix[i][start]);
  23. ++start;
  24. }
  25. return list;
  26. }
  27. }