Java 解题
定义几个int变量,存储最小行、最大行、最小列、最大列行号、已存入List中的整数的个数(感觉会节约时间,比每次计算List的size);
完成一行的循环,行号进行一次变化(最上方的行循环,对应最小行号加1;最下方的行循环,最大行号减去1);
列循环同理。

import java.util.ArrayList;
public class Solution {
    public ArrayList<Integer> printMatrix(int [][] matrix) {
       // 行列交替变化
        ArrayList<Integer> resultList = new ArrayList<Integer>();
        int minHang = 0;
        int maxHang = matrix.length;
        int minLie = 0;
        int maxLie = matrix[0].length;
        int totalNum = (maxHang)*(maxLie);
        int existNum = 0;
        if(maxHang==0 && maxLie==0){
            return resultList;
        }

        int j=0;
        int i=0;
        while(existNum<totalNum){
            // 最上边一行,向右
            for(j=minLie; j<maxLie; j++){
                resultList.add(matrix[minHang][j]);
                existNum++;
            }
            minHang++;
            if(existNum==totalNum) {break;}

            // 最右边一列,向下
            for(i=minHang; i<maxHang; i++){
                resultList.add(matrix[i][maxLie-1]);
                existNum++;
            }
            maxLie--;
            if(existNum==totalNum) {break;}

            // 最下边一行向左
            for(j=maxLie-1; j>=minLie; j--){
                resultList.add(matrix[maxHang-1][j]);
                existNum++;
            }
            maxHang--;
            if(existNum==totalNum) {break;}

            // 最左边一列,向上
            for(i=maxHang-1; i>=minHang; i--){
                resultList.add(matrix[i][minLie]);
                existNum++;
            }
            minLie++;
        }

        return resultList;
    }
}