import java.util.ArrayList; public class Solution { public ArrayList<Integer> spiralOrder(int[][] matrix) { ArrayList<Integer> res = new ArrayList<>(); if (matrix == null || matrix.length < 1 || matrix[0] == null || matrix[0].length < 1) { return res; } int n = matrix.length; int m = matrix[0].length; int li = 0; int lj = 0; int ri = n - 1; int rj = m - 1; while (li <= ri && lj <= rj) { if (li == ri) { // 从左往右 for (int k = lj; k <= rj; k++) { res.add(matrix[li][k]); } } else if (lj == rj) { // 从下往上 for (int k = li; k <= ri; k++) { res.add(matrix[k][rj]); } } else { // 从左往右 for (int k = lj; k <= rj; k++) { res.add(matrix[li][k]); } // 从下往上 for (int k = li + 1; k <= ri; k++) { res.add(matrix[k][rj]); } // 从右往左 for (int k = rj - 1; k >= lj; k--) { res.add(matrix[ri][k]); } // 从上往下 for (int k = ri - 1; k > li; k--) { res.add(matrix[k][lj]); } } li++; lj++; ri--; rj--; } return res; } }