import java.util.*; import java.util.ArrayList; public class Solution { public ArrayList<Integer> printMatrix(int [][] matrix) { int x1 = 0; int x2 = matrix[0].length - 1; int y1 = 0; int y2 = matrix.length - 1; int curX = 0; int curY = 0; ArrayList<Integer> result = new ArrayList<>(); // 0 -> x, 1-> y, 2 -> -x, 3 -> -y int flag = 0; while (curX <= x2 && curX >= x1 && curY <= y2 && curY >= y1) { result.add(matrix[curY][curX]); if (flag == 0) { if (curX == x2) { curY++; y1++; flag = 1; } else { curX++; } } else if (flag == 1) { if (curY == y2) { curX--; x2--; flag = 2; } else { curY++; } } else if (flag == 2) { if (curX == x1) { curY--; y2--; flag = 3; } else { curX--; } } else { if (curY == y1) { curX++; x1++; flag = 0; } else { curY--; } } } return result; } }