Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order.
For example,
Given the following matrix:
[ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] ]
You should return [1,2,3,6,9,8,7,4,5]
.
package leetCode; import java.util.ArrayList; import java.util.List; /** * Created by lxw, liwei4939@126.com on 2018/3/9. */ public class L054_Spiral_Matrix { public List<Integer> spiralOrder(int[][] matrix){ List<Integer> res = new ArrayList<>(); if (matrix == null || matrix.length == 0 || matrix[0].length == 0) { return res; } int tR = 0; int tC = 0; int dR = matrix.length - 1; int dC = matrix[0].length - 1; while (tR <= dR && tC <= dC){ printEdge(matrix, res, tR++, tC++, dR--, dC --); } return res; } private void printEdge(int[][] matrix, List<Integer> res, int tR, int tC, int dR, int dC){ if (tR == dR){ for (int i =tC; i <= dC; i++){ res.add(matrix[tR][i]); } } else if (tC == dC){ for (int i = tR; i <= dR; i++){ res.add(matrix[i][tC]); } } else { int curR = tR; int curC = tC; while (curC != dC){ res.add(matrix[tR][curC]); curC ++; } while (curR != dR){ res.add(matrix[curR][dC]); curR ++; } while (curC != tC){ res.add(matrix[dR][curC]); curC--; } while (curR != tR){ res.add(matrix[curR][tC]); curR--; } } } public static void main(String[] args){ L054_Spiral_Matrix tmp = new L054_Spiral_Matrix(); int[][] matrix = new int[][]{{1, 2, 3},{4, 5, 6},{7, 8, 9}}; List<Integer> res = tmp.spiralOrder(matrix); System.out.println(res); } }