剑指29 顺时针打印矩阵

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