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

2020-07-08  本文已影响0人  bangbang2
image.png

解题思路

下图是打印的顺序


image.png

首先去定义上、下、左、右四个边界
比如:在图中,打印1,2,3.
起始位置是左边界,结束位置是右边界,在遍历结束后,上边界要向下收缩,同时要判断上边界是否大于下边界,如果大于,立刻结束
while循环,直接返回数组
以此为例,在其它三个边界继续遍历
最后将数组返回

代码

class Solution {
    public int[] spiralOrder(int[][] matrix) {
        if(matrix.length==0) return new int[0];
        int x=0;
        int l=0;
        int r=matrix[0].length-1;
        int b=0;
        int u=matrix.length-1;
        int [] nums=new int[(r+1)*(u+1)];
        while(true){
            for(int i1=l;i1<=r;i1++){
                nums[x++]=matrix[b][i1];
            }
            b++;
            if(b>u) break;
            for(int i2=b;i2<=u;i2++){
                nums[x++]=matrix[i2][r];
            }
            r--;
            if(l>r) break;
            for(int i3=r;i3>=l;i3--){
                nums[x++]=matrix[u][i3];
            }
            u--;
            if(b>u) break;
            for(int i=u;i>=b;i--){
                nums[x]=matrix[i][l];
                x++;
            }
            l++;
            if(l>r) break;
        }
        return nums;
    }
}
上一篇下一篇

猜你喜欢

热点阅读