思路

没有什么好的思路

  • 按圈顺时针循环,在纸上画出来各个边界
  • 旋转数组,取第一行,然后递归。然而旋转数组的复杂度比较高。

代码

import java.util.ArrayList;
public class Solution {
    public ArrayList<Integer> printMatrix(int [][] matrix) {
        ArrayList<Integer> arr=new ArrayList<>();
        int p=0,q=matrix[0].length-1,h=0,l=matrix.length-1;
        while(p<=q && h<=l){
            if(p==q){
                for(int i=h;i<=l;i++){
                    arr.add(matrix[i][p]);
                }
                break;
            }
            if(h==l){
                for(int i=p;i<=q;i++){
                    arr.add(matrix[h][i]);
                }
                break;
            }

            for(int i=p;i<=q;i++){
                arr.add(matrix[h][i]);
            }
            h++;
            for(int i=h;i<=l;i++){
                arr.add(matrix[i][q]);
            }
            q--;
            for(int i=q;i>=p;i--){
                arr.add(matrix[l][i]);
            }
            l--;
            for(int i=l;i>=h;i--){
                arr.add(matrix[i][p]);
            }
            p++;
        }
        return arr;
    }
}