import java.util.ArrayList;
public class Solution {
    public ArrayList<Integer> printMatrix(int [][] matrix) {
       ArrayList<Integer> list= new ArrayList<>();
        if(matrix.length == 0||matrix[0].length == 0) return list;
        
        int left=0,right=matrix[0].length-1;
        int up=0,down=matrix.length-1;
        while(left<=right && up<=down){
            for(int i=left;i<=right;i++) list.add(matrix[up][i]);
            up++;
            
            for(int i=up;i<=down;i++) list.add(matrix[i][right]);
            right--;
            
            if(up>down || left>right) break; // 如果仅有一列或者一行,在这个判断结束的时候可以跳出
            
            for(int i=right;i>=left;i--) list.add(matrix[down][i]);
            down--;
            
            for(int i=down;i>=up;i--) list.add(matrix[i][left]);
            left++;
        }
        return list;
    }
}
设置上下左右4个指针,用来控制矩阵的打印。需要注意只有一行或者一列的情况:这时候通过内循环的前两个循环就可以完全输出,不需要进行后两个循环。