剑指 Offer 29. 顺时针打印矩阵java题解

class Solution {
    public int[] spiralOrder(int[][] matrix) {
        if(matrix.length==0)
            return new int[0];
        int l=0,r=matrix[0].length-1,t=0,b=matrix.length-1;
        int x=0;
        int[] res=new int[(r+1)*(b+1)];
        while(true){
            //向右
            for(int i=l;i<=r;i++){
                res[x++]=matrix[t][i];
            }
            if(++t>b) break;
            //向下
            for(int i=t;i<=b;i++){
                res[x++]=matrix[i][r];
            }
            if(--r<l) break;
            //向左
            for(int i=r;i>=l;i--){
                res[x++]=matrix[b][i];
            }
            if(--b<t) break;
            //向上
            for(int i=b;i>=t;i--){
                res[x++]=matrix[i][l];
            }
            if(++l>r) break;
        }
        return res;
    }
}

时间复杂度 O(MN) 空间复杂度O(1)
剑指 Offer 29. 顺时针打印矩阵java题解_第1张图片

你可能感兴趣的:(剑指Offer)